美文网首页优美编程
Vuecli3.0 + TS采坑笔记

Vuecli3.0 + TS采坑笔记

作者: 小遁哥 | 来源:发表于2019-11-14 00:14 被阅读0次

导读

安装完环境后,在编写代码时可能会遇到问题,从路由、配置、代码提示、检测、使用等多方面进行总结。

Cannot find module '@/components/A/A.vue'

image

项目拉下来就给我来个标红,查了半天,最后还是自己闭目养神想到了!

关闭 Vetur的检测就好

image

组件内的路由守卫无效

在main.ts 下加上如下代码

import Component from 'vue-class-component'

Component.registerHooks([
  'beforeRouteEnter',//进入路由之前
  'beforeRouteLeave',//离开路由之前
  'beforeRouteUpdate'
])

vue-property-decorator 是基于 vue-class-component,之前找了半天vue-property-decorator 没找到

使用CSS module 后热更新失效

vue.config.jscss 配置中不能设置 extract: true,其实不用设置就好,脚手架会自动区分开发环境和生产环境。

详情可看:https://cli.vuejs.org/zh/config/#css-requiremoduleextension

使用开发者工具的Sources面板快速定位到源文件

vue.config.js

const production = process.env.NODE_ENV === "production";

module.exports = {

  configureWebpack: config => {
    if (!production) {
      // 开发环境配置
      config.devtool = "source-map";
    }
  }
}

vue-property-decorator 的一些使用

@Component

@Component
export default class DroppableArea extends Vue {}


@Component({
  components: {
    FlexWrapper,
  },
})
export default class Demo extends Vue {}

@Prop

@Prop({
    default: "",
 })
  
@Prop({
    default: () => defaultRel,//引用类型
})

@Ref

@Ref() readonly fileInput!: HTMLInputElement;

计算属性的声明

get generateAccept() {}

使用函数式编程

需要通过 Vue.extend

import Vue from "vue";
export default Vue.extend({
  functional: true,
  props: {
    tag: {
      type: String,
      default: "div",
    },
  },
  //   render(createElement: CreateElement, context: RenderContext): JSX.Element {

  render(createElement, context): JSX.Element {
    return createElement(context.props.tag, context.data, context.children);
  },
});

ts 类型相关

强制转换

let dom = $event.target! as HTMLElement;

可能为null的处理

const dataTransfer: DataTransfer = $event.dataTransfer!;

获取内置对象类型

Object.prototype.toString.call($event);

路由类型

 beforeRouteEnter(to: Route, form: Route, next: Function) {
    next((vm: Demo) => {
      vm.activeName = to.name!;
    });
  }

编辑vue.config.js 可以得到提示

安装 @types/webpack

vue.config.js

/**
 * @type {import('webpack').Configuration}
 */

提示效果

image

开启脚手架的Tree shaking

package.json 加上 "sideEffects": false

https://www.webpackjs.com/guides/tree-shaking/

tsconfig.json 中的一些配置


    "allowSyntheticDefaultImports": true, // 允许从没有设置默认导出的模块中默认导入
    "strictPropertyInitialization": false, // 定义一个变量就必须给它一个初始值
    "allowJs": true, // 允许编译javascript文件
    // 忽略 this 的类型检查, Raise error on this expressions with an implied any type.
    "noImplicitThis": false,
    "pretty": true, // 给错误和消息设置样式,使用颜色和上下文。

自定义eslint 配置 偏向于逻辑检测

module.exports = {
  root: true,
  env: {
    node: true,
  },
  extends: ["plugin:vue/essential", "@vue/typescript"],
  rules: {
    "no-constant-condition": [
      //不允许在条件中使用常量表达式,循环也要检查,容易造成浏览器卡死,可以使用递归代替。
      "error",
    ],
    "no-cond-assign": "error", //禁止条件表达式中出现赋值操作符
    "no-unreachable": "error", //return+console.log的调试方法,陋习
    "for-direction": "error", //强制 “for” 循环中更新子句的计数器朝着正确的方向移动
    "no-dupe-args": "error", //禁止在 function 定义中出现重复的参数
    "no-dupe-keys": "error", // 禁止对象字面量中出现重复的 key
    "no-duplicate-case": "error", //禁止重复 case 标签
    "no-empty-character-class": "error", //禁止在正则表达式中出现空字符集
    "no-ex-assign": "error", //禁止对 catch 子句中的异常重新赋值
    "no-func-assign": "error", //禁止对 function 声明重新赋值
    "no-invalid-regexp": "error", //禁止在 RegExp 构造函数中出现无效的正则表达式 (no-invalid-regexp)
    "no-obj-calls": "error", //禁止将全局对象当作函数进行调用(no- obj - calls)
    "no-regex-spaces": "error", //禁止正则表达式字面量中出现多个空格
    "no-sparse-arrays": "error", //禁用稀疏数组
    "no-template-curly-in-string": "error", //禁止在常规字符串中出现模板字面量占位符语法
    "no-unexpected-multiline": "error", //禁止使用令人困惑的多行表达式
    "no-unsafe-finally": "error", //禁止在 finally 语句块中出现控制流语句
    "valid-typeof": "error", //强制 typeof 表达式与有效的字符串进行比较
    "use-isnan": "error", //要求调用 isNaN()检查 NaN
    "array-callback-return": "error", //强制数组方法的回调函数中有 return 语句
    "block-scoped-var": "error", //把 var 语句看作是在块级作用域范围之内
    "consistent-return": "error", //要求使用一致的 return 语句
    "default-case": "error", //要求 Switch 语句中有 Default 分支
    "no-alert": "error", //当遇到 alert、prompt 和 confirm 时,该规则将发出警告
    "no-case-declarations": "error", //禁止在 case 或 default 子句中出现词法声明(no -case-declarations)
    "no-fallthrough": "error", //禁止 case 语句落空
    "no-new-wrappers": "error", //禁止原始包装实例
    "no-param-reassign": "error", //禁止对函数参数再赋值
    "no-proto": "error", //禁用__proto__
    "no-redeclare": "error", //禁止重新声明变量
    "no-self-assign": "error", //禁止自身赋值
    "no-self-compare": "error", //禁止自身比较
    "no-sequences": "error", //不允许使用逗号操作符
    "no-throw-literal": "error", //限制可以被抛出的异常
    "no-unmodified-loop-condition": "error", //禁用一成不变的循环条件
    "no-undef": "error", //禁用未声明的变量
    "no-use-before-define": "error", //当使用一个还未声明的标示符是会报警告。
    "no-class-assign": "error", //不允许修改类声明的变量
    "no-const-assign": "error", //不允许改变用const声明的变量
    "no-dupe-class-members": "error", //不允许类成员中有重复的名称
    "no-duplicate-imports": "error", //禁止重复导入
    "no-this-before-super": "error", //在构造函数中禁止在调用super()之前使用this或super
    "no-useless-computed-key": "error", //禁止在对象中使用不必要的计算属性
    "no-var": "error", //要求使用 let 或 const 而不是 var
  },
  parserOptions: {
    parser: "@typescript-eslint/parser",
  },
  overrides: [
    {
      files: ["**/__tests__/*.{j,t}s?(x)"],
      env: {
        mocha: true,
      },
    },
  ],
  // globals: {
  //   _: true, //全局使用_ eslint不报错
  // },
};

代码提示效果演示

vue 属性提示

image

路径提示@

image

路径提示 相对路径

image

原生方法提示

image image

第三方库lodash 提示,记得安装声明文件

image

地址: https://github.com/xiaodun/sf-time-killer

在VueCli3.0 中使用Lodash

我坑我自己-vuecli3.0 + TS中应用HOC

相关文章

  • Vuecli3.0 + TS采坑笔记

    导读 安装完环境后,在编写代码时可能会遇到问题,从路由、配置、代码提示、检测、使用等多方面进行总结。 Cannot...

  • 我坑我自己-vuecli3.0 + TS中应用HOC

    FlexWrapper.vue 代码如下 这样的组件还有FloatWrapper、InlineBlockWrapp...

  • 开发采坑笔记

    在开发过程中遇到很多工程问题,由于运行环境不同,执行顺序,前置条件造成的问题,在分析定位问题过程中,花费大量的时间...

  • SpringBoot 采坑笔记

    1. convert 没有自动加载,导致无效 如果类中添加了 @EnableWebMvc 并扩展了 exten...

  • Flutter采坑笔记

    1.所有弹出窗口所使用的context不能是顶层Widget的context,同时顶层Widget必须是State...

  • Echarts 采坑笔记

    标题颜色属性修改 背景颜色的设置 设置grid 绘图位置 修改x轴和y轴的颜色 x轴文字倾斜 设置legend 标...

  • (1)安装部署vuecli3.0

    本节知识点 (1) 通过官方文档查看vuecli3.0安装 (2) 通过自定义来安装vuecli3.0 (一) 通...

  • Universal Link 前端部署采坑记

    Universal Link 前端部署采坑记 Universal Link 前端部署采坑记

  • NR帧结构Tc and Ts

    NR中引入了除了Ts之外的Tc的概念,Ts如同LTE中的Ts: NR中的采样间隔是Tc,因此不同的子载波间隔下的采...

  • Typescript

    TypeScript(TS)部分 TypeScript学习笔记

网友评论

    本文标题:Vuecli3.0 + TS采坑笔记

    本文链接:https://www.haomeiwen.com/subject/ecrlictx.html