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