TypeScript给接口添加任意属性

一个接口允许存在任意的属性

interface IPerson {
  name: string;
  age: number;
  userBio?: string;
  [propName: string]: any;
}

let wangzz: IPerson = {
  name: 'wangzz',
  age: 24,
  userBio: '万事胜意',
  gender: 'male' // 任意属性取string类型的值
}

一旦定义任意属性,确定属性和可选属性的类型都必须时其类型的子类型

interface Person {
    name: string;
    age?: number;
    [propName: string]: string;
}

let tom: Person = {
    name: 'Tom',
    age: 25,
    gender: 'male'
};

// index.ts(3,5): error TS2411: Property 'age' of type 'number' is not assignable to string index type 'string'.
// index.ts(7,5): error TS2322: Type '{ [x: string]: string | number; name: string; age: number; gender: string; }' is not assignable to type 'Person'.
//   Index signatures are incompatible.
//     Type 'string | number' is not assignable to type 'string'.
//       Type 'number' is not assignable to type 'string'.

🦕🤡🤢一个接口中只能定义一个任意属性,如果接口中存在多个类型的属性可以将任意属性定义为联合类型

interface: IPerson {
  name: string;
  age?: number;
  [propName: string]: string | number | boolean;
}
posted @ 2023-03-26 23:48  Felix_Openmind  阅读(510)  评论(0)    收藏  举报
*{cursor: url(https://files-cdn.cnblogs.com/files/morango/fish-cursor.ico),auto;}