我遇到TypeScript问题,无法解决(错误消息非常模糊)。这是造成错误的代码:
type Reducer<V,T> = (accumulator: V, value: V, index: number, collection: T) => V;
class Collection< K, V > extends Map < K, V > {
reduce < V > (reducer: Reducer < V, this > , initialValue ? : V): V {
const {
length
} = arguments;
let index = 1,
iterator = this.values(),
accumulator: V = initialValue;
if (length < 2) {
// No initialValue was passed.
index = 0;
// Jump over an item, which is the
// new value of `initialValue`.
accumulator = iterator.next().value;
}
for (let value of iterator) {
// `accumulator` being the accumulator.
accumulator = reducer(accumulator, initialValue, index, this);
++index;
}
return accumulator;
}
}
出现的错误消息是:
[ts] Type 'V' is not assignable to type 'V'. Two different types with this name exist, but they are unrelated. [2719]
这是什么问题? V
是同一类型,因此我的代码看不到问题。
答案 0 :(得分:-1)
请尝试class Collection extends Map {
extends Map < K, V >
可能正在将类型K
和V
注册为要定义的外部对象。因此,它与您在函数中使用的内容不同。
例如,由于Java是一个OOP lang,因此可以说Java,使用泛型的类希望将这些泛型传递给函数。当您说extends Map < K, V >
时,它是相同的。它期望函数头中的K
和V
几乎像一个输入。在函数内部使用的K
和V
与在函数内部使用的变量类似。