如何只获取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);
我想要获取 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);