對象的類型--接口 interface
1. “在 TypeScript 中,我們使用接口(Interfaces)來定義對象的類型。”
2. “在面嚮對象語言中,接口(Interfaces)是一個很重要的概念,它是對行爲的抽象,而具體如何行動需要由類(classes)去實現(implements)”
interface Person {
name: string;
age: number;
}
let tom:Person {
name: 'tom',
age: 18
}
變量tom是接口Person數據類型,則tom的所有屬性必須與Person相同,無論是屬性名還是屬性值的數據類型,不能多也不能少必須完全一致
3. 可選屬性
interface Person {
name: string;
age?: number;
}
let tom:Person {
name: 'tom'
}
可選屬性的含義是該屬性可以不存在,但仍然不允許添加不存在的屬性
4. 任意屬性
接口中一旦定義了任意屬性,那麼接口中的可選屬性和確定屬性的必須是任意屬性的子屬性
interface Person {
name: string;
age?: number;
[propName:string]: any;
}
// A.
let tom:Person {
name: 'tom',
gender: 'male'
}
// B.
let tom:Person {
name: 'tom',
age: 12,
gender: 'male'
}
B會報錯,因爲任意屬性gender是string類型, number 不是 string 的子屬性,所以會報錯
5. 只讀屬性
只讀屬性是隻該字段只在創建的時候被賦值,它的約束力在於第一次給對象賦值的時候,並非是第一次給只讀屬性賦值的時候
interface Person {
name: string;
readonly age: number;
gender?: string;
}
let tom:Person {
name: 'tom',
age: 12,
gender: 'male'
}
tom.age = 15; // 報錯
// age屬性只能在對象賦值時賦值。
let tom:Person {
name: 'tom'
} // 錯 age爲確定屬性,賦值時必須包含此屬性
tom.age = 12; // 錯,age爲只讀屬性,只有第一次對象賦值時才能賦值