Angular 6 - неправильное свойство instanceof из примера - PullRequest
0 голосов
/ 22 февраля 2019

Я получил этот код из примера 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

Если свойство hero определено как тип героя, то почему instanceof дай мне ложь?Какой смысл объявлять это свойство как тип героя, если после установки значения это не тип героя, а обычный тип объекта

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019
  hero: Hero = {
    id: 1,
    name: 'Windstorm'
  };

В приведенном выше коде вы только объявляете тип свойства героя как Hero, но вы назначаете литерал объекта.Это должно быть hero: Hero = new Hero(), тогда только свойство this.hero instanceOf Hero вернет true.

Объяснение:

JavaScript - это язык на основе прототипов.Базовый класс для всех других классов, включая String, Array, равен Object.Итак, в вашем случае вы создаете объект, используя литерал объекта {}.Typescript не показывает никакой ошибки, потому что класс Hero также расширяется от Object.

0 голосов
/ 22 февраля 2019

Hero простирается от объекта, поэтому он позволяет назначать JSON ( JavaScript Object Notation )

Это просто пример, нормальный способ работы будет с объектамиконкретный тип.Если вам нужна переменная типа Hero, вы должны объявить ее неявно, используя конструктор new Hero ()

...