@@ -65,15 +65,15 @@ console.log(`My name is ${myName}`)
65
65
66
66
而代码风格的错误不影响编译,故少了一个分号的错误 ` tsc ` 没有检查出来。
67
67
68
- 对于未定义的变量 ` myNane ` ,` tsc ` 可以检测出来。由于用到 ` tslint ` 的地方肯定会接入 ` tsc ` 编译,所以 ` tslint ` 就没必要检测这个错误了。` eslint ` 需要能够独立于某个编译环境,所以能检测出此类错误,但是对于 TypeScript 代码,这其实是一种冗余的检测了。
68
+ 对于未定义的变量 ` myNane ` ,` tsc ` 可以检测出来。由于用到 ` tslint ` 的地方肯定会接入 ` tsc ` 编译,所以 ` tslint ` 就没必要检测这个错误了。` eslint ` 需要能够独立于某个编译环境,所以能检测出此类错误,而对于 TypeScript 代码,这其实是一种冗余的检测了。
69
69
70
- 其实不止 ` tsc ` 与 ` eslint ` 之间有冗余的检测,` tsc ` 与 ` tslint ` 之间也有一些冗余的检测,但是大部分都是因为早期的 ` tsc ` 还没能做到检测此类错误。
70
+ 事实上,不止 ` tsc ` 与 ` eslint ` 之间有冗余的检测,` tsc ` 与 ` tslint ` 之间也有一些冗余的检测,但是大部分都是因为早期的 ` tsc ` 还没能做到检测此类错误。
71
71
72
- 比如 TSLint 中的 ` typeof-compare ` 要求 ` typeof ` 表达式比较的对象必须是 ` 'undefined' ` , ` 'object' ` , ` 'boolean' ` , ` 'number' ` , ` 'string' ` , ` 'function' ` 或 ` 'symbol' ` 之一。而 TypeScript 2.2 之后,编译器就已经自带了这个功能。
72
+ 举个例子, TSLint 中的 ` typeof-compare ` 要求 ` typeof ` 表达式比较的对象必须是 ` 'undefined' ` , ` 'object' ` , ` 'boolean' ` , ` 'number' ` , ` 'string' ` , ` 'function' ` 或 ` 'symbol' ` 之一。而 TypeScript 2.2 之后,编译器就已经自带了这个功能。
73
73
74
74
下图表示了 ` tsc ` , ` eslint ` 和 ` tslint ` 能覆盖的检查:
75
75
76
- @ TODO 图片待补充
76
+ ![ TypeScript vs ESLint vs TSLint ] ( ../assets/typescript-eslint-tslint.png )
77
77
78
78
上图中,` tsc ` , ` eslint ` 和 ` tslint ` 之间互相都有重叠的部分,也有各自独立的部分。
79
79
@@ -250,7 +250,7 @@ if (tom.age == 25) {
250
250
251
251
需要注意的是,我们使用的是 ` ./node_modules/.bin/eslint ` ,而不是全局的 ` eslint ` 脚本,这是因为代码检查是项目的重要组成部分,所以我们一般会将它安装在当前项目中。
252
252
253
- 可是每次执行这么长一段脚本颇有不便,我们可以在 ` package.json ` 中添加一个 ` script ` 来简化这个步骤:
253
+ 可是每次执行这么长一段脚本颇有不便,我们可以通过在 ` package.json ` 中添加一个 ` script ` 来创建一个 npm script 来简化这个步骤:
254
254
255
255
``` json
256
256
{
@@ -298,7 +298,7 @@ VSCode 中的 ESLint 插件默认是不会检查 `.ts` 后缀的,需要在「
298
298
299
299
![ VSCode ESLint 错误信息] ( ../assets/vscode-eslint-error.png )
300
300
301
- ### 使用已完善的配置
301
+ ### 使用 AlloyTeam 的 ESLint 配置
302
302
303
303
ESLint 原生的规则和 ` eslint-plugin-typescript ` 的规则太多了,而且原生的规则有一些在 TypeScript 中支持的不好,需要禁用掉。
304
304
@@ -379,7 +379,83 @@ npm install --save-dev eslint-plugin-react
379
379
380
380
## 在 TypeScirpt 中使用 TSLint
381
381
382
- @TODO 待补充
382
+ TSLint 的使用比较简单,参考[ 官网的步骤] ( https://palantir.github.io/tslint/ ) 安装到本地即可:
383
+
384
+ ``` bash
385
+ npm install --save-dev tslint
386
+ ```
387
+
388
+ 创建配置文件 ` tslint.json `
389
+
390
+ ``` json
391
+ {
392
+ "rules" : {
393
+ // 必须使用 === 或 !==,禁止使用 == 或 !=,与 null 比较时除外
394
+ "triple-equals" : [
395
+ true ,
396
+ " allow-null-check"
397
+ ]
398
+ },
399
+ "linterOptions" : {
400
+ "exclude" : [
401
+ " **/node_modules/**"
402
+ ]
403
+ }
404
+ }
405
+ ```
406
+
407
+ 为 ` package.json ` 添加 ` tslint ` 脚本
408
+
409
+ ``` json
410
+ {
411
+ "scripts" : {
412
+ "tslint" : " tslint --project . src/**/*.ts src/**/*.tsx" ,
413
+ }
414
+ }
415
+ ```
416
+
417
+ 其中 ` --project . ` 会要求 ` tslint ` 使用当前目录的 ` tsconfig.json ` 配置来获取类型信息,很多规则需要类型信息才能生效。
418
+
419
+ 此时执行 ` npm run tslint ` 即可检查整个项目。
420
+
421
+ ### 在 VSCode 中集成 TSLint 检查
422
+
423
+ 在 VSCode 中安装 ` tslint ` 插件即可,安装好之后,默认是开启的状态。
424
+
425
+ ### 使用 AlloyTeam 的 TSLint 配置
426
+
427
+ AlloyTeam 为 TSLint 也打造了一套配置 [ tslint-config-alloy] ( https://github.com/AlloyTeam/tslint-config-alloy )
428
+
429
+ ``` bash
430
+ npm install --save-dev tslint-config-alloy
431
+ ```
432
+
433
+ 安装之后修改 ` tsconfig.json ` 即可
434
+
435
+ ``` json
436
+ {
437
+ "extends" : " tslint-config-alloy" ,
438
+ "rules" : {
439
+ // 这里填入你的项目需要的个性化配置,比如:
440
+ //
441
+ // 一个缩进必须用两个空格替代
442
+ // "indent": [
443
+ // true,
444
+ // "spaces",
445
+ // 2
446
+ // ]
447
+ },
448
+ "linterOptions" : {
449
+ "exclude" : [
450
+ " **/node_modules/**"
451
+ ]
452
+ }
453
+ }
454
+ ```
455
+
456
+ ### 使用 TSLint 检查 tsx 文件
457
+
458
+ TSLint 默认支持对 tsx 文件的检查,不需要做额外配置。
383
459
384
460
## Troubleshootings
385
461
@@ -421,6 +497,12 @@ npm install --save-dev eslint-plugin-react
421
497
}
422
498
```
423
499
500
+ ### 为什么有的错误 TSLint 可以检查出来,vscode 里的 TSLint 却检查不出来?
501
+
502
+ 因为 TSLint 依赖 ` tsconfig.json ` 获得了类型信息,而 [ vscode 里的 TSLint 暂不支持获取类型信息] ( https://github.com/Microsoft/vscode-tslint/tree/master/tslint#the-tslint-no-unused-variable-rule-doesnt-report-warnings-any-more ) ,所以 ` no-unused-variable ` 就失效了。
503
+
504
+ 不仅 ` no-unused-variables ` 失效了,[ TSLint rules] ( https://palantir.github.io/tslint/rules/ ) 里面所有标有 ` Requires Type Info ` 的规则都失效了。
505
+
424
506
[ TSLint ] : https://palantir.github.io/tslint/
425
507
[ ESLint ] : https://eslint.org/
426
508
[ `typescript-eslint-parser` ] : https://github.com/eslint/typescript-eslint-parser
0 commit comments