【发布时间】:2020-09-07 17:21:16
【问题描述】:
我尝试为具有与源函数完全相同的参数的函数进行类型化,但其中没有一个是可选的。
我尝试使用映射元组,使用逻辑:
type IFArgs = ArgsN<typeof getFunc>
type IMappedIFArgs = {[N in keyof IFArgs]-?: IFArgs[N]} // The -? removes "optionality"
const getFuncMandatory = <(...args: IMappedIFArgs) => string>getFunc // Error: IMappedIFArgs not a tuple...
其中 ArgsN 来自 tsargs 库,并巧妙地定义如下:
export type ArgsN<T extends (...args: any[]) => any> = T extends (...args: infer K) => any ? K : never;
根据 3.1 文档,当源是元组时,映射类型也应该是元组。在 VS Code 中进行检查时,这似乎几乎是这种情况——但还不足以让编译器接受它作为参数。此外,映射类型的长度返回 2 | 3,而不是 3 - 这是有道理的,但不是我想要的。
任何想法如何使映射元组成为有效的参数元组?关于如何使用其他机制存档相同内容的任何想法也很好。
【问题讨论】:
标签: typescript