【发布时间】:2021-03-03 03:29:07
【问题描述】:
我目前正在进行一项广泛的 TypeScript 练习(typescript-exercises.github.io,练习 14),我似乎被困在我看来像是一个 typescript 错误的问题上。但由于我对 TypeScript 没有那种经验,所以我将首先在这里询问它是否真的是一个错误,或者只是我很愚蠢。
在本练习中,您需要将类型添加到一堆函数中,除了任意数量的参数,如果参数数量不足,则返回子函数。这里的问题是 TypeScript 似乎没有得到正确的泛型。
如果我检查在我的 IDE 的最后一行中使用的func 的类型,它会读作func<*, number>,其中 * 是 complete 类型的 add 而不是数字。
是我做错了什么还是这真的是 TypeScript 搞错了?
declare function func<T1, T2>(subFunc: (arg1: T1, arg2: T2) => T1);
function add(a: number, b: number): number;
function add(a: number): (b: number) => number;
function add(): typeof add;
function add(a?: number, b?: number) {
if (a === undefined)
return add;
if (b === undefined) {
return function subAdd(b?: number) {
if (b === undefined)
return subAdd;
return a + b;
}
}
return a + b;
}
console.log( func(add) );
实际练习禁止更改测试(最后一行),因此很遗憾不能手动提供泛型。
附:这是对实际练习的简化。如果您想查看原点,这是在 test.ts 中的一项测试中用作 reducer 的 add 函数。
【问题讨论】:
-
什么是
add1?您的代码中没有该名称。如果您明确而不是说“完整类型”(无论这意味着什么),您的问题会更清楚。 -
@kaya3 是的,那是我将 add1 重命名为 add 之前的遗留问题。只是为了澄清而对其进行了编辑。
标签: typescript typescript-generics