TypeScript 類實現介面

admin發表於2019-04-23

TypeScript類實現介面與C#或者Java等語言非常類似,用來強制一個類去符合某種契約。

程式碼例項如下:

[typescript] 純文字檢視 複製程式碼
interface Itest {
  webName: string;
}
class Antzone implements Itest {
  webName: "螞蟻部落";
  age:4;
  constructor() { }
}

TypeScript 介面簡介一章節最後介紹過,介面只規定約束,並沒有具體實現。

如果類實現某一介面,那麼就可以實現介面中的成員,上面的程式碼中,將webName賦值為字串"螞蟻部落"。

又因為介面是描述資料的結構的,所以實現介面的類沒必要實現介面中的成員。

程式碼例項如下:

[typescript] 純文字檢視 複製程式碼
interface Itest {
  webName: string;
  show(address: string);
}
class Antzone implements Itest {
  webName;
  age:4;
  show(address:string){
    console.log(address);
  }
  constructor() { }
}

上面的程式碼中,webName並沒有被實現。

當一個類實現了一個介面時,只對其例項部分進行型別檢查,程式碼例項如下:

[typescript] 純文字檢視 複製程式碼
interface Itest {
  new (str: string, num: number):void;
}
class Antzone implements Itest {
  constructor(strh: string, num: number) { }
}

介面規定了建構函式的簽名,然而只會檢查類的例項部分,所以類的建構函式不會被檢測到。

報錯截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201904/23/223356dfjlfk9iuks2iffd.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

既然無法檢測類的非例項部分,那麼可以變通一下修改類的建構函式:

[typescript] 純文字檢視 複製程式碼
interface ClockConstructor {
    new (hour: number, minute: number): ClockInterface;
}
interface ClockInterface {
    tick();
}
 
function createClock(ctor: ClockConstructor, hour: number, minute: number): ClockInterface {
    return new ctor(hour, minute);
}
 
class DigitalClock implements ClockInterface {
    constructor(h: number, m: number) { }
    tick() {
        console.log("beep beep");
    }
}
class AnalogClock implements ClockInterface {
    constructor(h: number, m: number) { }
    tick() {
        console.log("tick tock");
    }
}
 
let digital = createClock(DigitalClock, 12, 17);
let analog = createClock(AnalogClock, 7, 32);

程式碼非常的簡單,不多介紹,如果有任何疑問可以在文章底部留言。

相關文章