TypeScript:Array.reduce
VS Code中的函数报告错误,但在WebStorm中是正常的。
这是VS代码中的现状:
它报道
类型字符串未分配给类型字符串[]
这就是WebStorm中的现状:
虽然没有问题,但没有提供回调注释,如上面的map
和filter
以前的代码是:
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的编译器中。
如果使用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;