在打字稿中推断抽象 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]
我正在尝试获取打字稿 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]