type CtorParamsType<T> = T extends {
new(...args: infer U);
} ? U : any;
class MyType {
constructor(name: string, age: number) {
}
}
type T1 = CtorParamsType<MyType> //any
type T2 = CtorParamsType<{ new(name: string, age: number); }> //[string, number]
在此示例中,我希望T1和T2具有相同的类型。为什么它们不同?
答案 0 :(得分:3)
您要查找的类型已经存在,称为ConstructorParameters
。
您的类型也可以使用,唯一的问题是MyType
是实例类型。您需要类类型的构造函数参数,可以使用typeof MyType
class MyType {
constructor(name: string, age: number) {
}
}
type T1 = ConstructorParameters<typeof MyType> // [string, number]
type T2 = ConstructorParameters<{ new(name: string, age: number): any }> // [string, number]