我从Angular示例中获取了此代码
import { Component, OnInit } from '@angular/core';
import { Hero } from '../hero';
@Component({
selector: 'app-heroes',
templateUrl: './heroes.component.html',
styleUrls: ['./heroes.component.css']
})
export class HeroesComponent implements OnInit {
hero: Hero = {
id: 1,
name: 'Windstorm'
};
constructor() {
console.log(this.hero instanceof Hero);
console.log(this.hero instanceof Object);
const otherHero = new Hero();
console.log(otherHero);
}
ngOnInit() {
}
}
控制台输出是:
false
true
true
如果属性英雄被定义为英雄类型那么为什么instanceof给我假?将此属性声明为Hero类型有什么意义,如果在设置值之后它不是Hero类型而是正常的Object类型
hero: Hero = {
id: 1,
name: 'Windstorm'
};
在上面的代码中,您只是将一个类型的英雄属性声明为Hero
,但是您要分配一个Object文字。它应该是hero: Hero = new Hero()
,然后只有this.hero instanceOf Hero
属性将返回true
。
说明:
JavaScript是一种基于原型的语言。包括String,Array在内的所有其他类的基类是Object
。因此,在您的情况下,您使用对象文字{}
创建一个对象。 Typescript没有显示任何错误,因为Hero
类也从Object
扩展。
Hero从object扩展,因此它允许你分配一个JSON(JavaScript Object Notation)
这只是一个例子,正常的工作方式是使用特定类型的对象。如果你想要一个Hero类型的变量,你必须使用构造函数new Hero()隐式声明它