TS學習之接口


TypeScript的核心原則之一是對值所具有的結構進行類型檢查。接口的作用就是為這些類型命名和為你的代碼或第三方代碼定義契約。

interface testType {
    name: string;
    age: number;
}  
function test(obj: testType): void {
    console.log(obj.name);
    console.log(obj.age);
}
test({name:"fred",age:20,height:180})
//fred  20

interface:接口關鍵字,只要傳入的對象滿足接口的必要條件,那么它就是被允許的。

可選屬性(接口定義中加“?”)

interface testType {
    name: string;
    age?: number;
}

只讀屬性(readonly)

interface testType {
    readonly name: string;
    readonly age: number;
}

let test1:testType = {name:"fred",age:20}
test1.name = "Bob"; //error

額外的屬性檢查

interface testType {
    name?: string;
    age?: number;
}

function test(conf: testType): void {

}

test({ nama: "fred", age: 20 }) //error:'nama' dose not exist in type 'testType'

解決方法:a) 斷言

test({ nama: "fred", age: 20 } as testType) //斷言

    b)字符串索引簽名

interface testType {
    name?: string;
    age?: number;
    [propName:string]:any;  //字符串索引簽名
}

    c)中間變量繞過類型檢測

let test2 = { nama: "fred", age: 20 }; //中間變量繞過類型檢測
test(test2)

接口繼承(extends)

interface nameFace {
    name: string;
}
interface ageFace {
    age: number;
}
interface heightFace extends nameFace, ageFace {
    height: number;
}

let person = <heightFace>{};
person.name = "fred";
person.age = 20;
person.height = 180;

 接口繼承類

class Point {
    x: number;
    y: number;
}

interface Point3d extends Point {
    z: number;
}

let point3d: Point3d = {x: 1, y: 2, z: 3};

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM