【问题标题】:Is it possible to constrain a generic type defined in a jsDoc @template declaration?是否可以约束在 jsDoc @template 声明中定义的泛型类型?
【发布时间】:2023-03-17 13:35:01
【问题描述】:

我们希望使用 jsDoc cmets 而不是 .ts 文件在常规 .js 文件中定义 mixin classes

mixin 类的一个重要方面是使用extends 将泛型类型参数限制为类构造函数。例如,上面的页面有以下 TypeScript:

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

TypeScript 的 jsDoc 支持允许 @template T 声明,但我们看不到任何方法可以将 T 限制为例如类构造函数。有什么办法吗?

我们愿意创建/使用 .d.ts 文件来支持这一点,只要 mixin 声明本身可以存在于 .js 文件中,并且 checkJs 将适当地对 .js 文件进行类型检查。 js文件。

【问题讨论】:

标签: generics typescript mixins


【解决方案1】:

从 TypeScript 2.9 开始,似乎现在可以使用 TypeScript 来约束模板参数(参见 issue 24600)。因此,上面的 TypeScript 声明将变为:

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

/**
 * @template {Constructor<{}>} T
 * @param {T} Base
 */
function Tagged(Base) { … }

【讨论】:

    猜你喜欢
    • 2018-12-22
    • 2020-06-28
    • 1970-01-01
    • 2017-01-21
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多