typescript - 为什么我不能在 TypeScript 中以这种方式只读数组?
问题描述
文档显示(#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 !
解决方案
有一个内置的只读数组类型,它使数组只读(除非断言回一个普通数组)。
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;