逍遥大鹏 發表於 2019-6-6 16:52:00

vue+Typescript初级入门

<div class="cnblogs_code">
<pre>Typescript 在前端圈已经逐渐普及,Vue 2.5.0<span style="color: rgba(0, 0, 0, 1)"> 改进了类型声明,使得对 TypeScript 更加友好

不过要想在项目中直接使用 TypeScript仍然需要对项目进行一些改造

PS: 建议使用Visual Studio Code 进行开发



vue</span>-cli 3.0<span style="color: rgba(0, 0, 0, 1)"> 可以直接创建 typescript 项目,不过目前还只有 beta 版,有兴趣的朋友可以尝试一下



一、安装依赖

首先还是用 vue</span>-<span style="color: rgba(0, 0, 0, 1)">cli 生成项目

vue init webpack demo
然后安装必要依赖项:typescript、ts</span>-loader、vue-class-<span style="color: rgba(0, 0, 0, 1)">component

npm install typescript vue</span>-class-component -<span style="color: rgba(0, 0, 0, 1)">D
npm install ts</span>-loader@3.3.1 -<span style="color: rgba(0, 0, 0, 1)">D
上面安装 ts</span>-loader 的时候,指定了版本 3.3.1<span style="color: rgba(0, 0, 0, 1)">

这是因为在写这篇博客的时候(</span>2018-03-14),在安装 ts-loader 的最新版 4.0.1<span style="color: rgba(0, 0, 0, 1)"> 的情况下,启动项目会报错



另外还有几个库可以按需引入:

tslint: 规范 ts 代码,需要配合 tsllint</span>-loader 使用,最好再加上 tslint-config-<span style="color: rgba(0, 0, 0, 1)">standard;

vue</span>-property-decorator:vue-class-<span style="color: rgba(0, 0, 0, 1)">component 的扩展,添加了几个结合 Vue 特性的装饰器(@Emit,@Prop 等);

vuex</span>-class: 在 vue-class-<span style="color: rgba(0, 0, 0, 1)">component 基础上加强了对 vuex 的支持。



二、配置 Webpack

然后修改 .</span>/build/<span style="color: rgba(0, 0, 0, 1)">webpack.base.conf.js 文件:



在 resolve.extension 中添加 ‘.ts’,使引入 ts 文件时不用写 .ts 后缀





复制代码
{
test: </span>/\.tsx?$/<span style="color: rgba(0, 0, 0, 1)">,
loader: </span>'ts-loader'<span style="color: rgba(0, 0, 0, 1)">,
exclude: </span>/node_modules/<span style="color: rgba(0, 0, 0, 1)">,
options: {
    appendTsSuffixTo: [</span>/\.vue$/<span style="color: rgba(0, 0, 0, 1)">]
}
}
复制代码
在 module.rules 中添加 webpack 对 ts 文件的解析



三、其他配置

在项目根目录下创建 tsconfig.json 文件:

复制代码
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> tsconfig.json</span>
<span style="color: rgba(0, 0, 0, 1)">{
</span>"compilerOptions"<span style="color: rgba(0, 0, 0, 1)">: {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 与 Vue 的浏览器支持保持一致</span>
    "target": "es5"<span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这可以对 `this` 上的数据属性进行更严格的推断</span>
    "strict": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 如果使用 webpack 2+ 或 rollup,可以利用 tree-shake:</span>
    "module": "es2015"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"moduleResolution": "node"<span style="color: rgba(0, 0, 0, 1)">
}
}
复制代码
完整的 tsconfig.json 配置项可以参考官方文档



在 .</span>/src 目录创建 vue-shim.d.ts 文件,让 ts 识别 .vue 文件:

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> vue-shim.d.ts</span>
declare module "*.vue"<span style="color: rgba(0, 0, 0, 1)"> {
import Vue from </span>"vue"<span style="color: rgba(0, 0, 0, 1)">;
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> Vue;
}


四、文件改造

将 src 目录下的所有 js 文件后缀改为 .ts



然后将 webpack 配置文件 .</span>/build/<span style="color: rgba(0, 0, 0, 1)">webpack.base.conf.js 中的入口 entry 修改为 main.ts





改造之后的 ts 文件不会识别 .vue 文件,所以在引入 .vue 文件的时候,需要手动添加 .vue 后缀







在所有 .vue 文件中,都需要在 </span>&lt;script&gt; 中添加 lang="ts"<span style="color: rgba(0, 0, 0, 1)"> 标识

要让 TypeScript 正确推断 vue 组件选项中的类型,还需要引入 vue,并使用 Vue.extend 定义组件





至此基本改造已经完成,执行 npm run dev 就能正常启动项目



五、基于类的 Vue 组件改造

上面改造 .vue 文件的时候,只是简单的使用了 Vue.extend 方法,组件内部还是采用原生的 vue 写法

这在实际开发的时候并不能良好的使用 typescript 特性,所以还需要利用 vue</span>-class-<span style="color: rgba(0, 0, 0, 1)">component 继续改造



首先在 tsconfig.json 中添加配置项,然后重启项目

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 允许从没有设置默认导出的模块中默认导入</span>
"allowSyntheticDefaultImports": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 启用装饰器</span>
"experimentalDecorators": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">


然后改造 .vue 文件的 </span>&lt;script&gt;<span style="color: rgba(0, 0, 0, 1)"> 部分,以 HelloWorld.vue 为例:

复制代码
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> HelloWorld.vue</span>

&lt;script lang="ts"&gt;<span style="color: rgba(0, 0, 0, 1)">
import Vue from </span>'vue'<span style="color: rgba(0, 0, 0, 1)">
import Component from </span>'vue-class-component'

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @Component 修饰符注明了此类为一个 Vue 组件</span>
<span style="color: rgba(0, 0, 0, 1)">@Component({})
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Hello extends Vue {
msg: String </span>= 'Welcome to Your Vue.js App'<span style="color: rgba(0, 0, 0, 1)">
}
</span>&lt;/script&gt;
<span style="color: rgba(0, 0, 0, 1)">复制代码


组件内部不再采用 Vue 的格式,一开始也许不易接受,可以参考官方的迁移示例

复制代码
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Vue 文件格式示范</span>

&lt;template&gt;
&lt;div&gt;
    &lt;input v-model="msg"&gt;
    &lt;p&gt;prop: {{propMessage}}&lt;/p&gt;
    &lt;p&gt;msg: {{msg}}&lt;/p&gt;
    &lt;p&gt;helloMsg: {{helloMsg}}&lt;/p&gt;
    &lt;p&gt;computed msg: {{computedMsg}}&lt;/p&gt;
    &lt;button @click="greet"&gt;Greet&lt;/button&gt;
&lt;/div&gt;
&lt;/template&gt;

&lt;script&gt;<span style="color: rgba(0, 0, 0, 1)">
import Vue from </span>'vue'<span style="color: rgba(0, 0, 0, 1)">
import Component from </span>'vue-class-component'<span style="color: rgba(0, 0, 0, 1)">

@Component({
props: {
    propMessage: String
}
})
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class App extends Vue {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> initial data</span>
msg = 123

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> use prop values for initial data</span>
helloMsg = 'Hello, ' + <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.propMessage

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> lifecycle hook</span>
<span style="color: rgba(0, 0, 0, 1)">mounted () {
    </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.greet()
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> computed</span>
<span style="color: rgba(0, 0, 0, 1)">get computedMsg () {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> 'computed ' + <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.msg
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> method</span>
<span style="color: rgba(0, 0, 0, 1)">greet () {
    alert(</span>'greeting: ' + <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.msg)
}
}
</span>&lt;/script&gt;
<span style="color: rgba(0, 0, 0, 1)">复制代码


六、使用TSlint 规范代码

如果对代码格式有着严格的要求,建议引入 tslint 来规范代码,首先安装以下依赖

npm init tslint tslint</span>-loader tslint-config-standard -<span style="color: rgba(0, 0, 0, 1)">D


然后在 .</span>/build/<span style="color: rgba(0, 0, 0, 1)">webpack.base.conf.js 的 module.rules 中添加规则



{
test: </span>/\.ts$/<span style="color: rgba(0, 0, 0, 1)">,
exclude: </span>/node_modules/<span style="color: rgba(0, 0, 0, 1)">,
enforce: </span>'pre'<span style="color: rgba(0, 0, 0, 1)">,
loader: </span>'tslint-loader'<span style="color: rgba(0, 0, 0, 1)">
}


在项目根目录创建配置文件 tslint.json

复制代码
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> tslint.json</span>
<span style="color: rgba(0, 0, 0, 1)">{
</span>"extends": "tslint-config-standard"<span style="color: rgba(0, 0, 0, 1)">,
</span>"globals"<span style="color: rgba(0, 0, 0, 1)">: {
    </span>"require": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
}
}
复制代码


这时已经可以启动项目了,如果出现了这样的警告



只需要在 main.ts 里面,将实例化的 Vue 赋值给一个对象就好



只是这里的 tslint 校验规则是直接引入的 standard 规范,如果需要自定义

贴一篇网上找的 tslint.json 的配置项说明(来源:http:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">blog.csdn.net/zw52yany/article/details/78688837)</span>
<span style="color: rgba(0, 0, 0, 1)">
复制代码
extends: 内设配置项名称
rules:规则
{
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">ts专用</span>
    adjacent-overload-signatures : <span style="color: rgba(0, 0, 255, 1)">true</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Enforces function overloads to be consecutive.</span>
    ban-comma-operator:<span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">禁止逗号运算符。</span>
    ban-type: [<span style="color: rgba(0, 0, 255, 1)">true</span>, ["object","User {} instead."],["string"]] <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">禁止类型</span>
    member-access: [<span style="color: rgba(0, 0, 255, 1)">true</span> , "no-public"||"check-accessor"|| "check-constructor" || "check-parameter-property"] ,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">类成员必须声明 private public ....</span>
    member-order: [<span style="color: rgba(0, 0, 255, 1)">true</span>, {order:....}],<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">类声明排序</span>
    no-any: <span style="color: rgba(0, 0, 255, 1)">true</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不需使用any类型</span>
    no-empty-interface:<span style="color: rgba(0, 0, 255, 1)">true</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">禁止空接口 {}</span>
    no-import-side-effect: [<span style="color: rgba(0, 0, 255, 1)">true</span>, {"ignore-module": "(\\.html|\\.css)$"}], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">禁止导入带有副作用的语句</span>
    no-inferrable-types:[<span style="color: rgba(0, 0, 255, 1)">true</span>, "ignore-params", "ignore-properties"], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许将变量或参数初始化为数字,字符串或布尔值的显式类型声明。</span>
    no-internal-module:<span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许内部模块</span>
    no-magic-numbers: [<span style="color: rgba(0, 0, 255, 1)">true</span>,1,2,3], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许在变量赋值之外使用常量数值。当没有指定允许值列表时,默认允许-1,0和1</span>
    no-namespace: [ <span style="color: rgba(0, 0, 255, 1)">true</span>,"allpw-declarations"], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许使用内部modules和命名空间</span>
    no-non-<span style="color: rgba(0, 0, 255, 1)">null</span>-assertion: <span style="color: rgba(0, 0, 255, 1)">true</span> , <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许使用!后缀操作符的非空断言。</span>
    no-parameter-reassignment: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许重新分配参数</span>
    no-reference: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用/// &lt;reference path=&gt; 导入 ,使用import代替</span>
    no-unnecessary-type-assertion: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果类型断言没有改变表达式的类型就发出警告</span>
    no-<span style="color: rgba(0, 0, 255, 1)">var</span>-requires: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许使用var module = require("module"),用 import foo = require('foo')导入</span>
    only-arrow-functions:[<span style="color: rgba(0, 0, 255, 1)">true</span>,"allow-declarations","allow-named-functions"], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">允许箭头表达式,不需要传统表达式 ; 允许独立的函数声明;允许表达,function foo() {}但不是function() {}</span>
    prefer-<span style="color: rgba(0, 0, 255, 1)">for</span>-of:<span style="color: rgba(0, 0, 255, 1)">true</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">建议使用for(..of)</span>
    promise-<span style="color: rgba(0, 0, 255, 1)">function</span>-async: <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">, 要求异步函数返回promise
    typedef: [</span><span style="color: rgba(0, 0, 255, 1)">true</span>, "call-signature", "parameter", "member-variable-declaration"], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">需要定义的类型存在</span>
    typedef-whitespace: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">类型声明的冒号之前是否需要空格</span>
    unified-signatures: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">重载可以被统一联合成一个</span>

    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">function 专用</span>
    await-promise: <span style="color: rgba(0, 0, 255, 1)">true</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">警告不是一个promise的await</span>
<span style="color: rgba(0, 0, 0, 1)">    ban: [
          </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
          </span>"eval"<span style="color: rgba(0, 0, 0, 1)">,
          {</span>"name": "$", "message": "please don't"<span style="color: rgba(0, 0, 0, 1)">},
          [</span>"describe", "only"<span style="color: rgba(0, 0, 0, 1)">],
          {</span>"name": ["it", "only"], "message": "don't focus tests"<span style="color: rgba(0, 0, 0, 1)">},
          {
            </span>"name": ["chai", "assert", "equal"<span style="color: rgba(0, 0, 0, 1)">],
            </span>"message": "Use 'strictEqual' instead."<span style="color: rgba(0, 0, 0, 1)">
          },
          {</span>"name": ["*", "forEach"], "message": "Use a regular for loop instead."<span style="color: rgba(0, 0, 0, 1)">}
    ],
    curly: </span><span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">for if do while 要有括号</span>
    forin:<span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">用for in 必须用if进行过滤</span>
    import-blacklist:<span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">允许使用import require导入具体的模块</span>
    label-postion: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">允许在do/for/while/swith中使用label</span>
    no-arg:<span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许使用 argument.callee</span>
    no-bitwise:<span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许使用按位运算符</span>
    no-conditional-assignmen: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许在do-while/for/if/while判断语句中使用赋值语句</span>
    no-console:<span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不能使用console</span>
    no-construct: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许使用 String/Number/Boolean的构造函数</span>
    no-<span style="color: rgba(0, 0, 255, 1)">debugger</span>: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许使用debugger</span>
    no-duplicate-super: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">构造函数两次用super会发出警告</span>
    no-empty:<span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许空的块</span>
    no-eval: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许使用eval</span>
    no-floating-promises: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">必须正确处理promise的返回函数</span>
    no-<span style="color: rgba(0, 0, 255, 1)">for</span>-<span style="color: rgba(0, 0, 255, 1)">in</span>-array: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许使用for in 遍历数组</span>
    no-implicit-dependencies: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许在项目的package.json中导入未列为依赖项的模块</span>
    no-inferred-empty-object-type: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许在函数和构造函数中使用{}的类型推断</span>
    no-invalid-template-strings: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">警告在非模板字符中使用${</span>
    no-invalid-<span style="color: rgba(0, 0, 255, 1)">this</span>:<span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许在非class中使用 this关键字</span>
    no-misused-<span style="color: rgba(0, 0, 255, 1)">new</span>: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">禁止定义构造函数或new class</span>
    no-<span style="color: rgba(0, 0, 255, 1)">null</span>-keyword: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许使用null关键字</span>
    no-object-literal-type-assertion:<span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">禁止objext出现在类型断言表达式中</span>
    no-<span style="color: rgba(0, 0, 255, 1)">return</span>-await:<span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不允许return await</span>
    arrow-parens: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">箭头函数定义的参数需要括号</span>
<span style="color: rgba(0, 0, 0, 1)">}
复制代码</span></pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/xiaomili/p/10985896.html
頁: [1]
查看完整版本: vue+Typescript初级入门