gpt4 book ai didi

javascript - 为什么 typescript ReadonlyArrays 在编译为 javascript 时是 mutlabe

转载 作者:搜寻专家 更新时间:2023-10-30 20:55:13 26 4
gpt4 key购买 nike

我正在尝试从 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com