“ V”类型不可分配给“ V”类型。 [2719]

时间:2018-11-28 19:35:43

标签: typescript types

我遇到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是同一类型,因此我的代码看不到问题。

1 个答案:

答案 0 :(得分:-1)

请尝试class Collection extends Map {

extends Map < K, V >可能正在将类型KV注册为要定义的外部对象。因此,它与您在函数中使用的内容不同。

例如,由于Java是一个OOP lang,因此可以说Java,使用泛型的类希望将这些泛型传递给函数。当您说extends Map < K, V >时,它是相同的。它期望函数头中的KV几乎像一个输入。在函数内部使用的KV与在函数内部使用的变量类似。