banner
banner
banner
NEWS LETTER

TS-JS文件类型检查

Scroll down

严格检查标记

  1. 使用–checkJs对js文件进行类型检查和错误提示
  2. 忽略类型检查:// @ts-nocheck
  3. 忽略本行的错误:// @ts-ignore
  4. 去掉–checkJs设置并添加一个// @ts-check注释来x选择检查某些.js文件

用JSDoc类型表示类型信息

  • .js中类型和.ts中的类型一样可以被推断,类型推断不了使用JSDoc来指定
    1
    2
    3
    /** @type {number} */
    var x;
    x = 0;

从类内部赋值语句推断属性声明

  • ES2015/ES6不存在类属性的声明
  • .js文件中,属性声明是由类内部的属性赋值语句推断出来的。
  • 属性的类型是赋值语句右侧所有值的联合。
  • 构造函数里定义的属性是永远存在的,在方法存取器里定义的被认为是可选的。
  • 如果属性永远都不在类的内部被设置,那么它们被当成是未知的。
  • 如果类具有只读的属性,考虑在构造函数里给它初始化成undefined。

更多注意点

  1. 构造函数等同于类
  2. 支持CommonJS模块
  3. 类,函数和对象字面量是命名空间
  4. 对象字面量是开放的
  5. null,undefined,和空数组的类型是any或any[]
  6. 函数参数是默认可选的
  7. 由arguments推断出的var-args参数声明
    • 如果函数的体内有对arguments的引用,那么这个函数会隐式地被认为具有一个var-arg参数(比如:(…arg: any[]) => any)
  8. 未指定的类型参数默认为any

支持的JSDoc

  • @type: 引用一个类型名称

    • 可以指定联合类型:@type {(string | boolean)},()是可选,
    • 多种方式指定数组类型,
    • 可指定对象字面量类型
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      可使用字符串和数字索引签名来指定map-like 和array-like的对象
      /** @type {Object.<number, object>} */
      var arrayLike;
      指定函数类型:
      /** @type {(s: string, b: boolean) => number} Typescript syntax */
      var sbn2;
      直接使用未指定函数类型
      /**
      * @type {number | string}
      */
      var numberOrString = Math.random() < 0.5 ? "hello" : 100;
      var typeAssertedNumber = /** @type {number} */ (numberOrString)
  • @param (or @arg or @argument): 和@type相同

    • 使用[]把参数声明为可选的:
      1
      2
      3
      4
      5
      /** @typedef Pet { import("./a").Pet } // 导入类型从其它文件中导入声明 */
      /** @type {Pet} */

      var myPet;//可以使用类型别名
      myPet.name;
  • @returns (or @return) : 同上

  • @typedef: 声明复杂类型

  • @callback: 指定函数类型

  • @template: 声明泛型

  • @class (or @constructor): 通过this属性的赋值来推断构造函数,可以添加一个@constructor标记友好提示

  • @this: 通过上下文来推断出this的类型

  • @extends (or @augments): 只作用于类,指定类型参数的类型

  • @enum: 允许你创建一个对象字面量,它的成员都有确定的类型,不允许添加额外成员。

其他文章
cover
TS-JSX
  • 24/11/01
  • 11:40
  • TypeScript
cover
TS-装饰器
  • 24/11/01
  • 11:40
  • TypeScript
目录导航 置顶
  1. 1. 严格检查标记
  2. 2. 用JSDoc类型表示类型信息
  3. 3. 从类内部赋值语句推断属性声明
  4. 4. 更多注意点
  5. 5. 支持的JSDoc
请输入关键词进行搜索