typescript - 为什么我不能在 TypeScript 中以这种方式创建只读数组?

标签 typescript readonly readonly-collection

文档显示了 (#ReadOnlyArray) 如何使用接口(interface)来完成它,但是当我探索这种语言时,我想知道为什么它不能正常工作?

type TraverseTuple<T extends Array<unknown>> = {
     readonly [P in keyof T]: T[P];
}

const test: TraverseTuple<[string, number, string, number]> = ['s', 1, 'o', 2];

test[1] = 0; // not readonly !

最佳答案

有一个内置的只读数组类型,它使数组成为只读的(除非断言回一个普通数组)。

const test: ReadonlyArray<string|number> = ['s', 1, 'o', 2];

test[1] = 0;

但是,对于元组,您需要创建一个显式类型,如下所示:

const test: Readonly<{ 0: string, 1: number, 2: string, 3: number }> = ['s', 1, 'o', 2];

test[1] = 1;

关于typescript - 为什么我不能在 TypeScript 中以这种方式创建只读数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53960425/

相关文章:

typescript - 使用 yarn 中的 prepare 脚本安装 npm 包只产生 index.js

Github:只读访问私有(private)仓库

ruby-on-rails - 如何使用模型中的属性在 Rails 模型上设置只读?

c# - 拥有带有私有(private)访问器的公共(public)领域是否有意义?

c# - 创建完整的只读对象列表的最佳方法

c# - 通过 C# 中的方法强制添加到集合的模式

javascript - 在 Angular 服务中为 UI 缓存计算数据?

angular - 在Angular中导入模块时如何从模块自动运行服务?

javascript - Mobx - 对象文字只能指定已知属性

c# - 从 IList<> 返回 ReadOnlyCollection