类原型的 TypeScript/JSDoc 泛型作为另一个类的属性

TypeScript/JSDoc generics for class prototype as property of another class

提问人:ahocevar 提问时间:11/15/2023 更新时间:11/15/2023 访问量:24

问:

我有一个类,其中包含创建已配置原型实例的方法:

class A {}
class B {}

/**
 * @typedef {Object} Options
 * @property {typeof A|typeof B} type
 */

class Foo {

  /**
   * @param {Options} options
   */
  constructor(options) {
    /** @type {typeof A|typeof B} */
    this.type = options.type;
  }

  /**
   * @returns {A|B}
   */
  create() {
    return new this.type();
  }
}

const foo = new Foo({type: A});
const created = foo.create();

这工作正常,但现在我想使类通用,使 create() 方法的返回类型由传递给构造函数的选项确定。type

我尝试了以下方法,但没有成功:

/**
 * @template {A|B} Type
 */
class Foo {

  /**
   * @param {Options} options
   */
  constructor(options) {

    /** @type {typeof Type} */
    this.type = options.type;
  }

  /**
   * @returns {Type}
   */
  create() {
    return new this.type();
  }
}

问题出在本节:

    /** @type {typeof Type} */
    this.type = options.type;

不接受,并出现以下错误:@type {typeof Type}

“Type”仅指一种类型,但在此处用作值。(2693)

javascript typescript typescript-generics jsdoc

评论

0赞 Bergi 11/15/2023
您需要一个构造签名。不知道 jsdoc 是否支持。

答: 暂无答案