我想像从函数中获取参数一样获取方法的参数类型,但这是行不通的:
function func(a: number, b: string): string {
return b;
}
type ftype = Parameters<typeof func>;
class Klasse {
method(a: number, b: string): string {
return b;
}
}
// this does not work
type mtype = Parameters<typeof klasse.method>;
不,我不想把方法转换成静态方法,这只是一个简化的例子。
---修改---
该解决方案有效,但不适用于重载:
class Klasse {
method(a: string, b: number): void;
method(a: number, b: string): void;
method(a: number | string, b: number | string): string {
return 'x';
}
}
// this does not work
// type mtype = Parameters<typeof klasse.method>;
type mtype = Parameters<Klasse["method"]>;
const a: mtype = [0, ''];
const b: mtype = ['', 9]; // error
2条答案
按热度按时间7gs2gvoe1#
正如您所观察到的,可以使用类型实用程序
Parameters<Type>
派生函数参数的元组。因为函数在程序中是一个值(不是类型),所以派生函数的类型需要使用
typeof
operator,如下所示:TSPlayground
在JavaScript中,classes只是我们可以使用syntax sugar编写的特殊函数,派生类的类型与派生其他函数的方式相同:
typeof Klasse
.为了引用类的示例的类型,您可以简单地使用类名:当类在代码范围内时,TypeScript会自动在范围内创建一个类型名称来表示此:
Klasse
.TypeScript还提供了另一个用于执行此操作的实用程序类型:
InstanceType<Type>
下面是一些代码来演示和并列我上面描述的内容:
TSPlayground
x4shl7ld2#
类型
Klasse
是Klasse
示例的类型。