TypeScript03(接口和對象類型)

對象的類型

在TypeScript中,我們定義對象的方式要用關(guān)鍵字interface(接口),我的理解是使用interface來定義一種約束,讓數(shù)據(jù)的結(jié)構(gòu)滿足約束的格式。定義方式如下:

//這樣寫是會報錯的 因為我們在person定義了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]

需要注意的是,一旦定義了任意屬性,那么確定屬性和可選屬性的類型都必須是它的類型的子集:

//在這個例子當中我們看到接口中并沒有定義C但是并沒有報錯
//因為我們定義了[propName: string]: any;
//允許添加新的任意屬性
interface Person {
    b?:string,
    a:string,
    [propName: string]: any;
}
 
const person:Person  = {
    a:"213",
    c:"123"
}

只讀屬性 readonly

readonly 只讀屬性是不允許被賦值的只能讀取

//這樣寫是會報錯的
//因為a是只讀的不允許重新賦值
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)
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容