TS對象類型 -- 接口(interface)

/**
 * 對象類型 -- 接口
 */
//在面向對象的語言中,接口(interfaces)是對行爲的抽象,而具體如何行動需要類(class)去實現
//在Ts中的接口是非常靈活的概念,除了對行爲抽象之外,他還對形狀進行了描述
//1.
interface Person {
  name: string;
  age: number;
}
//變量使用接口時,形狀必須和接口相同,或多或少、類型不同都是不允許的
let tom: Person = {
  name: "tom",
  age: 12
};

//2.可選屬性 ?
interface Person2 {
  name: string;
  age?: number;
}
let tom2: Person2 = {
  name: "tom2"
};

//3.任意屬性
interface Person3 {
  name: string;
  age?: number;
  [proName: string]: any;
  //[proName: string]: stingr; 這種情況,age就會報錯,因爲number不屬於string類型的子集
}
//一旦定義了任意屬性,他就會影響確定屬性和可選屬性的類型
//任意屬性之外的其他屬性的類型,也必須符合任意屬性的類型
let tom3: Person3 = {
  name: "tom3",
  age: 15,
  gender: "any"
};

//4.只讀屬性
interface Person4 {
  readonly id: number;
  name: string;
}
let tom4: Person4 = {
  id: 12,
  name: "tom4"
};
tom4.name = "tom44";
//只讀的約束屬性在於第一次給對象賦值的時候,而不是給只讀屬性賦值的時候
//tom4.id = 123; 會報錯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章