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;
  }
}