2017-12-27 503 views
17

雖然與「英雄之旅」教程中的角網站上的工作,我發現下面的語法(不久):打字稿,使用類沒有構造

class Hero { 
    id: number, 
    name: string, 
} 

const aHero: Hero = { 
    id: 1, 
    name: 'Superman' 
} 

console.log(aHero instanceof Hero); //false 

什麼會做這點?當我檢查「aHero」的類型時,它只是一個普通對象而不是「英雄」類型。用構造函數初始化一個對象會更好嗎?:

class Hero { 
    constructor(id: number, name: string) {} 
} 
+13

好問題。答案是教程促進了一種不好的做法。 '英雄'應該是一個'界面'。 –

+2

託德格言有一個[偉大的文章](https://toddmotto.com/classes-vs-interfaces-in-typescript)解釋差異和何時/爲什麼要使用'接口'與'類' – mhodges

+0

你可以添加一個引用到這個代碼的部分? –

回答

2

您可以使用class作爲您使用它的方式。所以,無論Hero是接口還是類,它都不重要,因爲您將它用作類型。

class Hero { id: number; name: string } 

interface Hero { id: number; name: string } 

下列不擔心英雄是否是類或接口

let hero: Hero = { id: 1, name: 'me' } 

interfaceclass分辯interface是隻爲你,它不沒有得到JavaScript轉化。 A class確實如此,你不能newinterface

構造函數或沒有構造函數,如果你new那麼它就是instanceof。與此

let hero = new Hero(); 

instanceof日誌再次嘗試將true因爲你確實創造了英雄的一個實例用關鍵字new