ts-check


ts-check

概念
javascript 是弱类型语言,类型校验在一定程度上能够提高代码的健壮性。

typescript 已经对类型有了良好的支持,但对于一些老项目,如果替换成ts 成本和风险都是巨大的。

ts-check 用于js文件,vscode自动支持,非常适合老项目,

对于提高老项目的健壮性、可维护性有一定作用。
使用
// @ts-check 与其他例如 @type 配合使用

// @ts-check
/**
 * 声明函数参数类型
 * @param p0 {string} - TS 风格声明 p0
 * @param {string}  p1 - p1 是 string 类型参数
 * @param {string=} p2 - p2 是可选的 string 类型参数
 * @param {string} [p3] - 另外一种可选参数写法
 * @param {string} [p4="test"] - p4 是可选的 string 类型参数(默认值为 "test")
 * @return {string} - 函数返回值是 string 类型
 */

 function fn3(p0, p1, p2, p3, p4){
    // TODO

    return '2'
  }

  fn3('2', '1', '2', 'bb', '4')

  // 其中 p2、 p3, p4 皆是可选参数的写法,如果有就必须是指定的string类型
  // 必须 与 @ts-check配合使用

  //=========================================


  /**
 * 可以指定 union 类型,如字符串或者布尔值
 * @type {(string | boolean)}
 */
// 这样写只作用于下面第一个变量
let var3 = 1; // 不能将类型“1”分配给类型“string | boolean”。ts(2322)

let a = 2

/**
 * 用 “return” 说明函数的返回值类型
 * @return {number}
 */
 function fn1() {
     return '1' // return '1' :不能将类型“string”分配给类型“number”。
 }

 /**
 * 可以像使用 "@return" 一样使用 "@returns"
 * @returns {{a: string, b: number}}
 */
function fn2() {
    return {a: 1, b :2} // a : 不能将类型“number”分配给类型“string”。
}


/**
 * 用 "@typedef" 自定义复杂类型
 * @typedef {Object} SpecialType - 创建一个新的类型 'SpecialType'
 * @property {string} prop1 - SpecialType 属性 prop1 是 string 类型
 * @property {number} prop2 - SpecialType 属性 prop2 是 number 类型
 * @property {number=} prop3 - SpecialType 属性 prop3 是可选的 number 类型
 * @prop {number} [prop4] - SpecialType 属性 prop4 是可选的 number 类型
 * @prop {number} [prop5=42] - SpecialType 属性 prop5 是可选的 number 类型(默认值 42))
 */
/** @type {SpecialType} */

let specialTypeObject = {
    // 必选
    prop1: 1, // 不能将类型“number”分配给类型“string”
    prop2: true, // 不能将类型“boolean”分配给类型“number”。ts(2322)
    // 可选
    prop3: 2,
    prop4: '4', // 不能将类型“string”分配给类型“number”。ts(2322)
    prop5: 43
}; 
参考资料
https://imweb.io/topic/59e34d90b72024f03c7f495e

文章作者: KarlFranz
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 reprint policy. If reproduced, please indicate source KarlFranz !
评论
  目录