Skip to content

只读数组类型

ReadonlyArray 是一个特殊的类型,描述了不应该被改变的数组。

typeScript
function doStuff(values: ReadonlyArray<string>) {
  // 我们可以从 'values' 读数据...
  const copy = values.slice();
  console.log(`第一个值是 ${values[0]}`);

  // ...但我们不能改变 'vulues' 的值。
  values.push("hello!");
}

和属性的 readonly 修饰符一样,它主要是一个我们可以用来了解意图的工具。当我们看到一个返回 ReadonlyArrays 的函数时,它告诉我们我们根本不打算改变其内容,而当我们看到一个消耗 ReadonlyArrays 的函数时,它告诉我们可以将任何数组传入该函数,而不用担心它会改变其内容。

与 Array 不同,没有一个我们可以使用的 ReadonlyArray 构造函数。

typescript
new ReadonlyArray("red", "green", "blue");

相反,我们可以将普通的 Array 分配给 ReadonlyArray 。

typescript
const roArray: ReadonlyArray<string> = ["red", "green", "blue"];

正如 TypeScript 为 Array<Type> 提供了 Type[] 的速记语法一样,它也为 ReadonlyArray<Type> 提供了只读 Type[] 的速记语法。

typescript
function doStuff(values: readonly string[]) {
  // 我们可以从 'values' 读数据...
  const copy = values.slice();
  console.log(`The first value is ${values[0]}`);

  // 但我们不能改变 'vulues' 的值。
  values.push("hello!");
}

最后要注意的是,与 readony 属性修改器不同,可分配性在普通 Array 和 ReadonlyArray 之间不是双向的。

typescript
let x: readonly string[] = [];
let y: string[] = [];

x = y;
y = x;