编辑
由于时间的推移,这个问题 已经失去了它的有效性,从评论和答案中似乎可以看出这一点。尽管最初出现,但它不是这个人的骗局。
我有一个通过以下签名工作的翻译功能。
getI18n(id: string) : string { ... }
Run Code Online (Sandbox Code Playgroud)
我注意到输入以下内容有点乏味。
const titles = [
this.util.getI18n("Donkey"),
this.util.getI18n("Monkey"),
...
this.util.getI18n("Wonkey")
];
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用这样的东西。
const titles = this.util.getI18n(["Donkey", "Monkey", ..., "Wonkey"]);
Run Code Online (Sandbox Code Playgroud)
所以我引入了一个接受string和string[]的函数,其签名如下。
getI18n(id: string | string[]) : string | string[] { ... }
Run Code Online (Sandbox Code Playgroud)
这感觉很天才,直到我注意到我必须为愚蠢的 Typescript 解释结果是字符串而不是一些笨拙的巨型字符串或字符串数组,最终得到这个(对于非数组翻译)。
someValue.replace("xxx", this.util.getI18n("Donkey") as string);
Run Code Online (Sandbox Code Playgroud)
有没有办法为 TypeScript 解释输出是字符串,即使在其他情况下它可能是string[]?