是否有可能描述通过函数的参数推断出的类型?我需要这样的东西:
// some fn I have no control over its params
function someFn(a: string, b?: number, c?: any): any { /* ... */ }
// my wanted type that describes the args as object-records:
const result: MyType<typeof someFn> = {
a: 'str',
b: 42,
c: null
};
我无法控制函数参数的签名,因此不能将其转换为someFn(args: SomeFnArgs)
和MyType<SomeFnArgs>
。
我不知道是否有可能描述类型。
答案 0 :(得分:0)
是的,尽管不是那样。键入函数签名时,参数名称会丢失。您的示例中someFn
的参数类型为[string, number?, any]
(尽管该示例不是很有效,因为非可选参数可能不会出现在可选参数之后。
您可以通过(playground)获得此类型:
// type Parameters<T extends Function> = T extends (...args: infer R) => any ? R : never;
// How it's implemented, Parameters is a built-in type.
function someFn(a: string, b?: number, c?: any): any { /* ... */ }
type T0 = Parameters<typeof someFn>; // type T0 = [string, (number | undefined)?, any?]
const x: T0 = ['hello', 42]; // good
const y: T0 = ['hello', 'world', '!!']; // bad