3

文档显示(#ReadOnlyArray)如何使用界面来完成,但是当我探索该语言时,我想知道为什么这不起作用?

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 !
4

2 回答 2

2

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

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;
于 2018-12-28T15:07:58.633 回答
1

明确不支持此行为。映射元组的能力最近才通过这个 PR引入 typescript 3.1 。来自公关:

同态映射类型中的readonly-readonly+readonly注释目前对数组或元组元素没有影响(我们可能会考虑映射 from Arrayto ReadonlyArray,反之亦然,尽管这在技术上不是结构保留,因为它添加或删除了方法)。

于 2018-12-28T15:26:39.507 回答