任意属性

有时候我们希望一个接口允许有任意的属性,可以使用如下方式。

  1. interface Person {
  2. name: string;
  3. age?: number;
  4. [propName: string]: any;
  5. }
  6. let tom: Person = {
  7. name: "Tom",
  8. gender: "male",
  9. };

使用 [propName: string] 定义了任意属性取 string 类型的值。

只读属性

有时候我们希望对象中的一些字段只能在创建的时候被赋值,那么可以用 readonly 定义只读属性:

  1. interface Person {
  2. readonly id: number;
  3. name: string;
  4. age?: number;
  5. [propName: string]: any;
  6. }
  7. let tom: Person = {
  8. id: 123,
  9. name: "Tom",
  10. gender: "male",
  11. };

接口interface - 图1
如果使用 readonly 定义的属性 id 初始化后,又被赋值了,那么就会报错了:
接口interface - 图2