是否可以约束在 jsDoc @template 声明中定义的泛型类型?
Is it possible to constrain a generic type defined in a jsDoc @template declaration?
我们想使用 jsDoc 注释而不是 .ts 文件在常规 .js 文件中定义 mixin classes。
mixin classes 的一个重要方面是使用 extends
将泛型类型参数限制为 class 构造函数。例如,上面的页面有以下 TypeScript:
type Constructor<T> = new(...args: any[]) => T;
function Tagged<T extends Constructor<{}>>(Base: T) { ... }
TypeScript 的 jsDoc 支持允许 @template T
声明,但我们看不到任何方法可以将 T
限制为例如 class 构造函数。有什么办法吗?
我们愿意 create/use .d.ts
文件来支持这一点,只要 mixin 声明本身可以存在于 .js 文件中,并且 checkJs
将适当类型检查该 .js 文件的工作。
从 TypeScript 2.9 开始,似乎现在可以使用 TypeScript 来限制模板参数(参见 issue 24600)。因此,上述 TypeScript 声明将变为:
/**
* @template T
* @typedef {new(...args: any[]) => T} Constructor
**/
/**
* @template {Constructor<{}>} T
* @param {T} Base
*/
function Tagged(Base) { … }
我们想使用 jsDoc 注释而不是 .ts 文件在常规 .js 文件中定义 mixin classes。
mixin classes 的一个重要方面是使用 extends
将泛型类型参数限制为 class 构造函数。例如,上面的页面有以下 TypeScript:
type Constructor<T> = new(...args: any[]) => T;
function Tagged<T extends Constructor<{}>>(Base: T) { ... }
TypeScript 的 jsDoc 支持允许 @template T
声明,但我们看不到任何方法可以将 T
限制为例如 class 构造函数。有什么办法吗?
我们愿意 create/use .d.ts
文件来支持这一点,只要 mixin 声明本身可以存在于 .js 文件中,并且 checkJs
将适当类型检查该 .js 文件的工作。
从 TypeScript 2.9 开始,似乎现在可以使用 TypeScript 来限制模板参数(参见 issue 24600)。因此,上述 TypeScript 声明将变为:
/**
* @template T
* @typedef {new(...args: any[]) => T} Constructor
**/
/**
* @template {Constructor<{}>} T
* @param {T} Base
*/
function Tagged(Base) { … }