2017-12-27 504 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