【问题标题】:How to type list of objects that extend an object with generic types如何键入使用泛型类型扩展对象的对象列表
【发布时间】:2023-01-09 21:21:37
【问题描述】:

如何键入使用泛型扩展另一个类的对象的列表(对象、记录、映射;任何带键的东西)?

我真的不关心每个对象有什么样的泛型。我只想输入它“任何延伸 A 的东西”.

// valid abstract class
abstract class A<SOME_TYPE> {
  private something: SOME_TYPE;
}

// valid class
class B extends A<number> {}


// I want a list of objects that extend A
const listOfObjects: Record<string, A<any>> = {
  b: B, // TS2741 error
};
// nor this
const listOfObjects: Record<string, typeof A> = {
  b: B, // Type 'typeof B' is not assignable to type 'typeof A'
};

TS v 4.4.4

【问题讨论】:

  • 你为什么要使用 Record&lt;string, A&lt;any&gt;&gt; 而不是 A&lt;any&gt;[] 因为你想要“列表”???
  • @bogdanoff 我想要类列表而不是实例列表。同样的错误也出现在数组上——它不重要。 (等。也有提到的对象和地图)。

标签: typescript


【解决方案1】:

你应该 construct signatures 作为类型。

class B extends A<number> {}
class C extends A<number> {}

const listOfObjects: Record<string, new () => A<any>> = {
  b: B,
  c: C,
};

Playground

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2023-02-02
    • 2017-02-26
    • 2023-04-07
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多