【发布时间】:2020-11-25 08:50:29
【问题描述】:
我希望能够采用具有 n 个参数的函数并基于该函数返回一个类型,其中任何类型为 x 的参数都不再属于函数类型。例如:
function myTestFunction(email: string, context: TestContext, password: string): void {
...
}
我想要一个类型来使用它来创建这样的函数定义:
function myTestFunction(email: string, password: string): void {
...
}
我已经设法做到了:
type Filter<T> = T extends []
? []
: T extends [infer A, ...infer B]
? A extends TestContext
? Filter<B>
: [A, ...Filter<B>]
: T;
type ConvertFunction<T> = T extends (...args: any[]) => any
? (...args: Filter<Parameters<T>>) => ReturnType<T>
: T;
唯一的问题是参数名丢失,签名变成:
function myTestFunction(args_0: string, args_1: string): void {
...
}
请问如何在不丢失参数名称的情况下做到这一点?
【问题讨论】:
-
您使用的是哪个版本的打字稿? IIRC有改进w.r.t。这在 TS4+ 中
-
我使用的是 TS v4.1.2。
-
我会将
context更改为第一个参数(无论如何似乎更合乎逻辑)并使用此答案:stackoverflow.com/a/58765199/1517969
标签: typescript conditional-types