例如,我在类中有一个通用静态方法,并且想要在给定通用参数的情况下获取其参数类型:
class Model{
id = 0;
title = 'test';
}
class Child extends Model{
child = true;
}
class Foo {
static func<T extends Model>(a: Omit<T, 'id'>): number{
return 0;
}
}
type p = Parameters<typeof Foo['func']>[0] // how to get Child here?
有什么办法可以实现这一点吗?有正确的语法吗?
我已经尝试过了
Parameters<typeof Foo['func']<Child>>[0]
但这会产生语法错误...
在 TypeScript 中,当你有一个泛型函数并且想要获取具有特定类型参数的参数类型时,在使用
typeof
时不能直接指定类型参数。也就是说,编写 typeof
Foo['func']<Child>
会导致语法错误,因为 TypeScript 不支持在类型查询中应用类型参数。
您可以创建一个辅助类型来重建函数类型,并将泛型参数替换为您想要的特定类型。通过使用条件类型和
infer
关键字,您可以从原始函数中提取参数和返回类型,然后将泛型类型参数 T
替换为您想要的类型。
type SpecializedFooFunc<T extends Model> =
typeof Foo.func extends (a: Omit<infer U, 'id'>) => infer R
? (a: Omit<T, 'id'>) => R
: never;
type p = Parameters<SpecializedFooFunc<Child>>[0];