wake-up-neo.net

Typescript, Klassen ohne Konstruktor verwenden

Bei der Arbeit mit dem Tutorial "Tour of Heroes" auf der Angular-Website fand ich (in Kürze) folgende Syntax:

class Hero {
  id: number,
  name: string,
}

const aHero: Hero = {
  id: 1,
  name: 'Superman'
}

console.log(aHero instanceof Hero); //false

Was wäre der Sinn dabei? Wenn ich den Typ von "aHero" überprüfe, handelt es sich nur um ein allgemeines Objekt und nicht um einen "Hero" -Typ. Wäre es besser, ein Objekt einfach mit einem Konstruktor zu initialisieren ?:

class Hero {
  constructor(id: number, name: string) {}
}
23

Sie können class als Typ verwenden, so wie Sie es verwenden. Ob Hero also eine Schnittstelle oder Klasse ist, spielt keine Rolle, da Sie sie als Typ verwenden.

class Hero { id: number; name: string }

oder

interface Hero { id: number; name: string }

Das Folgende betrifft nicht, ob Hero eine Klasse oder Schnittstelle ist

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

Wo interface und class unterschieden ist, interface nur für Sie ist, wird es in Javascript nicht durchlässig. Eine class macht eine new und Sie können interface nicht. 

Konstruktor oder kein Konstruktor, wenn Sie new, dann ist es eine instanceof. Versuchen Sie es noch einmal damit

let hero = new Hero();

Ihr instanceof-Protokoll wird true sein, da Sie eine Instanz von Hero mit dem Schlüsselwort new erstellt haben.

12
lock42

Ich weiß, dass diese Frage schon einmal beantwortet wurde, aber was objektorientierten Code betrifft, war es immer so.

Ich glaube, dass Sie dies ohne Konstruktor tun können:

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

wenn Sie jedoch mit dem Konstruktor instanziieren möchten, können Sie dies in der Klasse tun

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
}

Und machen Sie das mit der Implementierung

let hero: Hero = new Hero(1,'goku');
let hero2: Hero = { ID: 2, Name: 'superman' }
0
Shane Thorndike