我正在尝试从official documentation学习打字稿。 在Interfaces section中,我阅读了以下内容:
TypeScript带有 ReadonlyArray 类型,该类型与 数组,其中删除了所有变异方法,因此您可以确保 创建后不要更改数组:
我已经玩过以下示例代码来测试案例:
let a: number[] = [1, 2, 3, 4];
let ro: ReadonlyArray<number> = a;
ro[0] = 12; // error!
ro.push(5); // error!
ro.length = 100; // error!
a = ro; // error!
我发现以前的代码像这样编译为javascript
var a = [1, 2, 3, 4];
var ro = a;
ro[0] = 12; // works
ro.push(5); // works
ro.length = 100; // works
a = ro; // works
您可以看到ro
现在在javascript中是可变的,其他javascript代码也可以更改它,为什么打字稿没有创建Array
对象的子类,而其中{{1 }} ?!我在这里想念的是什么?!
答案 0 :(得分:5)
TypeScript不会在运行时尝试入侵。早期有关于诸如以下内容的讨论:
...以及可能更细微但相似的问题。
结果是TypeScript不想接管JavaScript,因此它可以在设计和编译时工作,最后输出惯用的JavaScript。
这意味着在许多情况下,其他代码中会违反TypeScript规则,例如访问修饰符和只读数组-但这不是项目的目标。
答案 1 :(得分:1)