我有一个声明类型的函数。我计划使用此功能的部分版本。但我需要先为部分版本声明变量。
我可以复制签名,省略第一个参数。
虽然它可以工作并进行类型检查,但我想自动执行此操作。
这就是我想使用它的方式:
function myFunc(a: number, b: number): number {
return a + b
}
let partFunc: PartialFunc<typeof myFunc>
// later
partFunc = (b) => myFunc(42, b)
而且我不知道是否可以创建PartialFunc<Func>
通用。
我试过这种方法
interface Func1<T1, TRes> {
(a: T1): TRes
}
interface Func2<T1, T2, TRes> {
(a: T1, b: T2): TRes
}
interface PartialFunc<TFunc extends Func2<T1, T2, TRes>, T1=any, T2=any, TRes=any> extends Func1<T2, TRes>{}
或与泛型类型相同:
type F1<T1, TRes> = (a: T1) => TRes
type F2<T1, T2, TRes> = (a: T1, b: T2) => TRes
type PF<Func extends F2<T1, T2, TRes>, T1=any, T2=any, TRes=any> = F1<T2, TRes>
但这仍然需要我指定所有类型:
let partFunc: PF<typeof myFunc, number, number, number>
否则我有any
类型。
虽然这会强制执行类型检查,例如它不会接受PF<typeof myFunc, number, number, string>
,但我想避免再次编写类型。
基本上我想说 TS拿这个函数的签名,去掉第一个参数
有什么解决办法吗?
此任务的上下文 - 我有一个react-redux
应用程序,我想将参数从存储绑定到操作调度程序。