在使用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) {}
}
答案 0 :(得分:12)
您可以使用类作为您使用它的方式。因此,无论Hero是一个接口还是类,它都无关紧要,因为你将它作为一种类型使用。
class Hero { id: number; name: string }
或
interface Hero { id: number; name: string }
以下不涉及Hero是一个类还是接口
let hero: Hero = { id: 1, name: 'me' }
interface
和class
区分interface
仅适用于您,它不会被转换为javascript。 class
确实有new
,interface
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' }