【问题标题】:JSDoc, type variablesJSDoc,类型变量
【发布时间】:2020-04-02 05:47:57
【问题描述】:

我们可以在 JSDoc 中使用类型变量吗? 比如我要定义身份函数:

/**
 * @param {a} x
 * @return {a}
 */
const id = x => x;

但是当我将它与具体类型 id(2) 一起使用时,编辑器总是抱怨类型 number 不能分配给类型 a。我理解为什么在 Haskell 或其他类似语言中,注释中的小写名称被视为类型变量,但 JS 将其视为音乐会类型。 那么有没有办法在JSDoc中定义类型变量?

PS:是的,我知道有 TS 和 Flow,我应该使用它们而不是玩注解,但是我现在正在做的项目还没有准备好迁移到 TS,但同时我只想使用 JS 使事情尽可能安全。

【问题讨论】:

  • 你的意思是@typedef

标签: jsdoc type-variables


【解决方案1】:

我认为您是在为@param 类型始终与@return 类型相同的方法要求类型定义?

借用the Closure Compiler's Wiki: Declaring a bounded generic type:

 /**
  * @param {A} x
  * @template A
  * @return {A}
  */
 const id = (x) => x;

 /** @type {string} */
 let str='';

 /** @type {number} */
 let num=1;

 str=id(true); // Type warning.

 str=id('string'); // Type safe.

 str=id(1234); // Type warning.

 num=id(true); // Type warning.

 num=id('string'); // Type warning.

 num=id(1234); // Type safe.

产生以下警告:

JSC_TYPE_MISMATCH: assignment
found   : boolean
required: string at line 16 character 0
str=id(true)
^
JSC_TYPE_MISMATCH: assignment
found   : number
required: string at line 20 character 0
str=id(1234)
^
JSC_TYPE_MISMATCH: assignment
found   : boolean
required: number at line 22 character 0
num=id(true)
^
JSC_TYPE_MISMATCH: assignment
found   : string
required: number at line 24 character 0
num=id('string')

【讨论】:

    猜你喜欢
    • 2014-06-12
    • 2019-06-11
    • 1970-01-01
    • 2011-06-22
    • 2021-11-15
    • 1970-01-01
    • 2020-04-21
    • 2012-12-17
    • 2021-04-12
    相关资源
    最近更新 更多