打字稿,使用没有构造函数的类

时间:2017-12-27 17:39:07

标签: javascript angular class typescript constructor

在使用Angular网站上的“英雄之旅”教程时,我发现了以下语法(不久):

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) {}
}

2 个答案:

答案 0 :(得分:12)

您可以使用类作为您使用它的方式。因此,无论Hero是一个接口还是类,它都无关紧要,因为你将它作为一种类型使用。

class Hero { id: number; name: string }

interface Hero { id: number; name: string }

以下不涉及Hero是一个类还是接口

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

interfaceclass区分interface仅适用于您,它不会被转换为javascript。 class确实有newinterface new

构造函数或没有构造函数,如果您instanceof它,那么它是let hero = new Hero(); 。请使用此

再试一次
instanceof

您的true日志将为new,因为您确实使用关键字http://svn-repo/branchname创建了一个Hero实例。

答案 1 :(得分:0)

我知道这个问题之前已经回答过,但是就面向对象代码而言,一直都是这样。

我相信您可以在没有构造函数的情况下做到这一点:

let hero: Hero = { ID: 1, Name: 'goku'};

但是如果要使用构造函数实例化,则可以在类中进行

class Hero
{
    //notice optional parameters. You have more flexibility this way.
    constructor(id?: number, name?: string)
    {  
      this.ID = id;
      this.Name = name;
    }

    ID: number;
    Name: string
}

并通过实现做到这一点

let hero: Hero = new Hero(1,'goku');
let hero2: Hero = { ID: 2, Name: 'superman' }
相关问题