为什么 TypeScript 中的 'X' + Y = 'XY' ?预计会出现错误

Ahm*_*bai 2 typescript

我试图了解 TypeScript 及其工作原理,所以这是一个非常简单的示例:

const X: string = '5';
const Y: number = 6;
console.log(X+Y) // output '56' ! why not an error ? and why not 11 ?
Run Code Online (Sandbox Code Playgroud)

对于 JavaScript,这样的结果是可以接受的,但是由于 TypeScript 的设计目的是避免逻辑错误,为什么它不介意我们尝试将“字符串”附加到“数字”上。从逻辑上讲,即使对于串联来说,这也是没有意义的。另外为什么默认过程是将 Y 视为string并连接为什么不尝试将 X 转换为number并添加?

rua*_*akh 5

TypeScript 的原则之一是“您现有的工作 JavaScript 代码也是 TypeScript 代码”[链接]。

有很多现有的 JavaScript 代码都带有这样的代码:

const x = '5';
const y = 6;
console.log(x + y); // '56'
Run Code Online (Sandbox Code Playgroud)

并且确实期望 JavaScript 的行为。如果 TypeScript 强迫开发人员更改上述内容,这将成为迁移的重大障碍。(建议它应该输出 是不可能的;如果将文件从 重命名为可能会引入只能在运行时检测到的错误11,我们就不能信任 TypeScript 。).js.ts

现在,您可能想要反对您的代码有所不同,因为您使用变量的类型显式注释了变量。但是 TypeScript 提供了类型推断,如果

const x : string = '5';
Run Code Online (Sandbox Code Playgroud)

产生的变量的行为与

const x = '5';
Run Code Online (Sandbox Code Playgroud)

语言设计总是涉及权衡,TypeScript 决定为了兼容性而保留一些 JavaScript 怪癖。