如何只获取class的构造签名?

How to get only the construct signature of a class?

我想要获取 TypeScript class 构造函数的类型。在我的简单尝试中,它总是通用的 Function 而不是我期望的带有参数的实际构造函数。

class BufferedController {
  constructor(id: number) {
    this.id = id
  }

  static defaultBufferSize = 100 as const

  id: number
}

// ?? Just generic Function not the actual constructor
type instanceConstructor = BufferedController["constructor"]

// Class type
type C = typeof BufferedController

// This works fine to get other static properties from the class
type n = C["defaultBufferSize"]
// ?? Also generic Function not the actual constructor
type c = C["constructor"]

class获取构造函数类型的正确方法是什么?我想以 constructor(id: number) => BufferedController

这样的类型结束

我想我已经得到了你想要的。我们将编写一个仅获取构造签名的类型,如下所示:

type CtorType<T> = T extends { new (...args: infer Args): infer Ret } ? { new (...args: Args): Ret } : never;

一个class构造函数当然只是扩展了一个构造签名,所以我们采用参数并推断出return类型并创建一个新的构造签名。

它与 class 构造函数中的构造签名相同,只是它没有任何其他类似静态成员的东西。

然后我们可以这样使用它:

declare const ctor: CtorType<typeof BufferedController>;

ctor.defaultBufferSize // error - doesnt exist

new ctor(0);

Playground