以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!
BFE.devAI解答 - TypeScript 类型谜题
11. 实现ConstructorParameters<T>
可以通过在一个泛型类中使用infer
来实现MyConstructorParameters<T>
:
type MyConstructorParameters<T extends new (...args: any[]) => any> = T extends new (...args: infer P) => any ? P : never;
这里使用了一个受限泛型类型T extends new (...args: any[]) => any
作为输入,这个类型要求泛型参数T
必须是一个构造函数类型,其参数是任意类型的可变长数组。
然后,使用条件类型T extends new (...args: infer P) => any ? P : never
,当T
满足上述的泛型类型限制时,提取其中的参数类型组成一个元组类型P
,并返回出去;否则返回never
,表示这个T
类型不是构造函数类型。
使用示例:
class Foo { constructor (a: string, b: number, c: boolean) {}}type C = MyConstructorParameters<typeof Foo>; // [a: string, b: number, c: boolean]