對象的類型
在TypeScript中呼巷,我們定義對象的方式要用關(guān)鍵字interface(接口),我的理解是使用interface來定義一種約束癌幕,讓數(shù)據(jù)的結(jié)構(gòu)滿足約束的格式相艇。定義方式如下:
//這樣寫是會報錯的 因?yàn)槲覀冊趐erson定義了a稚配,b但是對象里面缺少b屬性
//使用接口約束的時候不能多一個屬性也不能少一個屬性
//必須與接口保持一致
interface Person {
b:string,
a:string
}
const person:Person = {
a:"213"
}
//重名interface 可以合并
interface A{name:string}
interface A{age:number}
var x:A={name:'xx',age:20}
//繼承
interface A{
name:string
}
interface B extends A{
age:number
}
let obj:B = {
age:18,
name:"string"
}
可選屬性 使用?操作符
//可選屬性的含義是該屬性可以不存在
//所以說這樣寫也是沒問題的
interface Person {
b?:string,
a:string
}
const person:Person = {
a:"213"
}
任意屬性 [propName: string]
需要注意的是,一旦定義了任意屬性,那么確定屬性和可選屬性的類型都必須是它的類型的子集:
//在這個例子當(dāng)中我們看到接口中并沒有定義C但是并沒有報錯
//因?yàn)槲覀兌x了[propName: string]: any;
//允許添加新的任意屬性
interface Person {
b?:string,
a:string,
[propName: string]: any;
}
const person:Person = {
a:"213",
c:"123"
}
只讀屬性 readonly
readonly 只讀屬性是不允許被賦值的只能讀取
//這樣寫是會報錯的
//因?yàn)閍是只讀的不允許重新賦值
interface Person {
b?: string,
readonly a: string,
[propName: string]: any;
}
const person: Person = {
a: "213",
c: "123"
}
person.a = 123
添加函數(shù)
interface Person {
b?: string,
readonly a: string,
[propName: string]: any;
cb():void
}
const person: Person = {
a: "213",
c: "123",
cb:()=>{
console.log(123)
}
}