条件类型中类型推断的问题

时间:2019-11-22 09:29:59

标签: typescript types type-inference

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具有相同的类型。为什么它们不同?

1 个答案:

答案 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]

Playground Link