JSDoc,类型变量
JSDoc, type variables
我们可以在 JSDoc 中使用类型变量吗?
例如我想定义恒等函数:
/**
* @param {a} x
* @return {a}
*/
const id = x => x;
但是当我将它用于具体类型 id(2)
时,编辑器总是抱怨类型 number
无法分配给类型 a
。我理解为什么在 Haskell 或其他类似语言中,注释中的小写名称被视为类型变量,但 JS 将其视为音乐会类型。
那么有没有办法在JSDoc?
中定义类型变量
PS: 是的,我知道有TS和Flow,我应该使用它们而不是玩注释,但是我现在正在做的项目还没有准备好迁移到TS,但同时我想只使用 JS 使事情尽可能安全。
我认为您是在要求 @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')
我们可以在 JSDoc 中使用类型变量吗? 例如我想定义恒等函数:
/**
* @param {a} x
* @return {a}
*/
const id = x => x;
但是当我将它用于具体类型 id(2)
时,编辑器总是抱怨类型 number
无法分配给类型 a
。我理解为什么在 Haskell 或其他类似语言中,注释中的小写名称被视为类型变量,但 JS 将其视为音乐会类型。
那么有没有办法在JSDoc?
PS: 是的,我知道有TS和Flow,我应该使用它们而不是玩注释,但是我现在正在做的项目还没有准备好迁移到TS,但同时我想只使用 JS 使事情尽可能安全。
我认为您是在要求 @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')