让我们声明一个泛型函数:
const fun = <E = any, V = any>(params: { value: V; getValue: (e: E) => V; }) => { /**/ }
在另一个地方,我们有一个消费者代码,应该输入,现在它导致TS错误:
type E = { value: string };
type Params = Parameters<typeof fun>[0];
const run = (params: Params) => {
// expecting params.value to be a string
// TS2339: Property 'length' does not exist on type 'unknown'.
if (params.value.length > 0) {
// TS2345: Argument of type '{ value: unknown; getValue: (e: unknown) => unknown; }'
// is not assignable to parameter of type '{ value: string; getValue: (e: E) => string; }'.
// Types of property 'value' are incompatible.
// Type 'unknown' is not assignable to type 'string'.
fun<E, string>(params);
}
};
有没有办法得到一个类型化函数的参数的类型,比如Params
是{ value: string; getValue: (e: E) => string }
,类似于Parameters<typeof fun<E,string>>[0]
。
1条答案
按热度按时间i2byvkas1#
如果我理解正确的话,您可以使
Params
类型成为泛型。就像这样: