我有一个将整数转换为英文单词的函数。我链接数组操作以一次性转换数字。我遇到的问题是reduce()我有一个数组concat(),它应该总是返回string []类型,但是typescript编译器抱怨从reduce()返回的类型是string [] |串。因此,无法调用reduce()之后的map(),并且类型字符串'上不存在tsc抱怨映射。
inEnglish(n: number): string {
return n === 0? 'zero': n.toLocaleString().split(',')
.reverse()
.map((g, i) => Number(g)? [g, scales[i]]: g)
.reverse()
.reduce((g: string[], a) => g.concat(a), [])
.map(g => Number(g)? this.under1000(Number(g)): g)
.join('')
}
因为我知道concat()总是返回类型string [],我怎么能告诉tsc它总是类型为string []而不是字符串?
答案 0 :(得分:2)
解决方案是明确指定reduce
的结果:
var scales :string[] =[]
function inEnglish(n: number): string {
return n === 0? 'zero': n.toLocaleString().split(',')
.reverse()
.map((g, i) => Number(g)? [g, scales[i]]: g)
.reverse()
.reduce<string[]>((g, a) => g.concat(a), [''])
.map(g => Number(g)? this.under1000(Number(g)): g)
.join('')
}