2016-11-16 128 views
0

我正在尋找模仿C#使用/實現接口的方式。總之,我試圖複製下面的代碼:Typescript類使用接口作爲類型而不是實現

interface EBook { 
    function read(); 
} 

class EBookReader { 

    private $book; 

    function __construct(EBook $book) { 
     $this->book = $book; 
    } 

    function read() { 
     return $this->book->read(); 
    } 

} 

class PDFBook implements EBook { 

    function read() { 
     return "reading a pdf book."; 
    } 
} 

class MobiBook implements EBook { 

    function read() { 
     return "reading a mobi book."; 
    } 
} 

使用機具工作正常,但是我不能模擬天生使用電子書作爲一種類型的類EBookReader方式。

codepen我的代碼樣機:http://codepen.io/Ornhoj/pen/gLMELX?editors=0012

回答

2

使用電子書作爲一種類型

的情況是敏感。

interface IEBook { 
    read(); 
} 

class EBookReader { 
    book: IEBook; 

    constructor(book: IEBook) { 
     this.book = book; 
    } 

    read() { 
     this.book.read(); 
    } 

} 

class PDFBook implements IEBook { 
    read() { 
     console.log("reading a pdf book."); 
    } 
} 

class MobiBook implements IEBook { 
    read() { 
     console.log("reading a mobi book."); 
    } 
} 
var pdf = new PDFBook(); 
var reader = new EBookReader(pdf); 
reader.read(); 

測試此代碼in the playground

+0

當它是一個簡單的區分大小寫的錯誤,讓我在一天半的時間內就愛上它。 +1並給出正確答案。 –

相關問題