我正在尝试从 official documentation 学习 Typescript . 而在 Interfaces section我已阅读以下内容:
TypeScript comes with a ReadonlyArray type that is the same as Array with all mutating methods removed, so you can make sure you don’t change your arrays after creation:
我已经使用以下示例代码来测试案例:
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 代码可以改变它,为什么 typescript 没有创建 Array
对象的子类,其中可变方法为 ro
删除了?!我在这里缺少什么?!
最佳答案
总体而言,TypeScript 不会试图在运行时进行侵入。早期曾讨论过以下问题:
- 在运行时强制类型
- 使私有(private)变量在运行时真正私有(private)
...可能还有更微妙但相似的问题。
结果是 TypeScript 不想接管 JavaScript,所以它在设计和编译时工作,并在最后输出惯用的 JavaScript。
这意味着在很多情况下,其他代码(例如访问修饰符和只读数组)可能会违反 TypeScript 规则 - 但这不是该项目的目标。
关于javascript - 为什么 typescript ReadonlyArrays 在编译为 javascript 时是 mutlabe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51785780/