我试图了解 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并添加?
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 怪癖。
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |