以下为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]