【问题标题】:TypeScript: how to access a static method of a generic classTypeScript:如何访问泛型类的静态方法
【发布时间】:2020-05-07 22:45:44
【问题描述】:

我有一个抽象类:

export enum SingularPluralForm {
  SINGULAR,
  PLURAL
};

export abstract class Dog {

  // ...

}

我有一个扩展抽象类的类:

export class Pug extends Dog {

  // ...

  static readonly kindNames = {
    [SingularPluralForm.SINGULAR]:
      'pug',
    [SingularPluralForm.PLURAL]:
      'pugs'
  };

  // ...

}

我还有一个使用泛型的参数化类,需要访问kindNames

export class Playground<T extends Dog> {

  // ...

  getKindName(form: SingularPluralForm) {
    // need to return T.kindNames[form] here...
  }

  // ...

}

如何从那里访问T.kindNames[form]

请您好心帮忙。谢谢。

UPD1:我会将Pug 类传递给Playground 的构造函数,但问题是Playground 类实际上是一个Angular 组件,它是由框架初始化的,而不是手动初始化的。 :-(

【问题讨论】:

  • 运行时没有T;你需要编写 ES2015+ 类并给它们类型。这意味着您的 Playground 类构造函数需要接受另一个类的构造函数的参数,如果它有机会访问它的属性。如果上一条评论中的代码满足您的需求,我会写出来作为答案;否则,请在问题中添加更多细节以区分您的用例。祝你好运!
  • @jcalz,谢谢,我考虑过这样做,但问题是Playground 实际上是一个 Angular 组件,它正在被框架初始化。
  • 根据初始化的位置,angular 通常会在注册过程中提供一个额外的参数来指定要使用的工厂。您能告诉我们您在哪里以及如何注册该对象吗?
  • 不客气 :)

标签: angular typescript generics


【解决方案1】:

发自 cmets 并改写为更全面一些

根据初始化的位置,angular 通常会在注册期间提供一个附加参数,用于指定要使用的工厂。

您可以查看factory registration 以获取[组件加载2

也许,您可以通过将属性直接与内部 DTO 或对象本身上的 @Input 装饰器绑定来解决您的问题。

【讨论】:

    猜你喜欢
    • 2012-02-27
    • 2011-08-19
    • 1970-01-01
    • 2010-11-24
    • 2023-03-07
    • 2010-10-16
    • 2014-07-06
    • 2017-12-29
    • 2013-04-18
    相关资源
    最近更新 更多