TypeScript:Array.reduce VS Code中的函数报告错误

问题描述 投票:1回答:1

TypeScript:Array.reduce VS Code中的函数报告错误,但在WebStorm中是正常的。

这是VS代码中的现状:

VS Code

它报道

类型字符串未分配给类型字符串[]

这就是WebStorm中的现状:

WebStorm

虽然没有问题,但没有提供回调注释,如上面的mapfilter

以前的代码是:

 private getUrlParameter(sParam) {
    return decodeURIComponent(window.location.search.substring(1)).split('&')
      .map((v) => v.split('='))
      .filter((v) => v[0] === sParam )
      .reduce((prev, curv, index, array) => curv[1], undefined);
  }

我不知道问题出在我的代码或TypeScript的编译器中。

javascript typescript webstorm
1个回答
0
投票

如果使用undefined,则选择的重载将是

reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T;

期望结果与数组的项目类型相同。

你应该在初始值(undefined)上使用类型断言让编译器知道结果类型将是string或为reduce指定类型参数

.reduce((prev, curv, index, array) => curv[1], <string>undefined);
.reduce<string>((prev, curv, index, array) => curv[1], undefined)

如果这样做,则选择的重载将是

reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U;
© www.soinside.com 2019 - 2024. All rights reserved.