JavaScript文件类型检查
TS2.3 以后的版本支持使用 --checkJs对.js文件进行类型检查和错误提示
- 通过 // @ts-nocheck 注释来忽略检查类型
- 通过去掉--checkJs设置并添加一个// @ts-check注释来选则检查某些.js文件
- 使用// @ts-ignore来忽略本行的错误
对比.js文件和.ts文件在类型检查上的差异,有如下几点需要注意:
一、 用JSDoc类型表示类型信息
- js文件里,类型可以和在ts文件里一样被推断出来,当类型不能被推断时可以通过JSDoc来指定
- 如同TS --noImplicitAny会在编译器无法推断类型的位置报错(除了对象字面量的情况)
二、属性的推断来自于类内的赋值语句
- 在js文件中,编译器从类内部的属性赋值语句来推断属性类型
- 属性的类型是在构造函数里赋的值得类型,除非未定义或者是undefined或null
- 在构造函数里定义的属性会被认为是一直存在的,在方法,存取器里定义的属性被当成是可选的
// JSDoc注解修饰的声明会被设置为这个声明的类型
/** @type {number} */
var x;
x = 0;
x = false;
// 属性的推断来自于类内的赋值语句
class PropertyC {
constructor(){
/** @type { number | undefined } */
this.constructorOnly = 0;
/** @type { number | undefined } */
this.constructorUnknown = undefined;
}
method() {
this.constructorOnly = false;
this.constructorUnknown = 'plunkbat';
this.methodOnly = 'ok';
}
method2(){
this.methodOnly = true;
}
}
网友评论