是否可以约束jsDoc @template声明中定义的泛型类型?

Jan*_*sky 5 generics mixins typescript

我们想使用jsDoc注释而不是.ts文件在常规.js文件中定义mixin类.

mixin类的一个重要方面是将泛型类型参数约束为类构造函数extends.例如,上面的页面包含以下TypeScript:

type Constructor<T> = new(...args: any[]) => T;
function Tagged<T extends Constructor<{}>>(Base: T) { ... }
Run Code Online (Sandbox Code Playgroud)

TypeScript的jsDoc支持允许@template T声明,但是我们没有看到任何方法来约束T,例如,是一个类构造函数.有办法做到这一点吗?

我们愿意创建/使用.d.ts文件来支持这一点,只要mixin声明本身可以存在于.js文件中,并且checkJs将适当地键入 - 检查该.js文件的工作方式.

ntn*_*nja 5

从 TypeScript 2.9 开始,现在似乎可以使用 TypeScript 来限制模板参数(请参阅issue 24600)。因此,上述 TypeScript 声明将变为:

/**
 * @template T
 * @typedef {new(...args: any[]) => T} Constructor
 **/

/**
 * @template {Constructor<{}>} T
 * @param {T} Base
 */
function Tagged(Base) { … }
Run Code Online (Sandbox Code Playgroud)