typescript类型从String.concat返回

时间:2018-01-19 08:34:04

标签: arrays string typescript types type-conversion

我有一个将整数转换为英文单词的函数。我链接数组操作以一次性转换数字。我遇到的问题是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 []而不是字符串?

1 个答案:

答案 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('')
}