在打字稿中推断抽象 class 的参数

Infer arguments for abstract class in typescript

我正在尝试获取打字稿 classes 和函数的参数。

export type CtorArgs<TBase> = TBase extends new (...args: infer TArgs) => infer Impl ? TArgs : never;
export type AbsCtorArgs<TBase> = TBase extends {constructor: (...args: infer TArgs) => infer Impl} ? TArgs : never;
export type FuncArgs<TBase> = TBase extends (...args: infer TArgs) => infer Impl ? TArgs : never;

function RegularFunction(a:string,b:number){}
class RegularClass{
    constructor(a:string,b:number){}
}    
abstract class AbstractClass{
    constructor(a:string,b:number){}
}


type thing = [
    CtorArgs<typeof RegularClass>,
    FuncArgs<typeof RegularFunction>,
    AbsCtorArgs<typeof AbstractClass>,
    CtorArgs<typeof AbstractClass>,
    FuncArgs<typeof AbstractClass>
];

但出于某种原因,抽象 classes 不 return 其构造函数的参数。 我怀疑这是因为 new 关键字 isn't available on abstract classes。有谁知道如何获得抽象 class 构造函数实际存在的那些参数?

不,这不是关于实例化抽象 classes,这是关于对继承自抽象 class 的 class 及其参数的依赖注入class。 See here

可以推断出 abstract class 的参数。您只需要在 new.

之前添加 abstract 关键字

参见示例:


abstract class AbstractClass {
    constructor(a: string, b: number) { }
}
export type InferAbstract<T> = T extends abstract new (...args: infer Args) => infer _ ? Args : never;

type Result = InferAbstract<typeof AbstractClass> // [a: string, b: number]

但您甚至不需要使用某些自定义实用程序类型。您可以使用在 TS 3.1

中引入的 built it [ConstructorParameters][1]