propiedades objeto method crear clases javascript angular class typescript constructor

javascript - objeto - Typescript, utilizando clases sin constructor



crear objeto javascript (2)

Mientras trabajaba con el tutorial "Tour of Heroes" en el sitio web de Angular, encontré la siguiente sintaxis (en breve):

class Hero { id: number, name: string, } const aHero: Hero = { id: 1, name: ''Superman'' } console.log(aHero instanceof Hero); //false

¿Cuál sería el punto de hacer esto? cuando si reviso el tipo de "aHero", es solo un objeto común y no un tipo de "Héroe". ¿Sería mejor simplemente inicializar un objeto con un constructor ?:

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


Puedes usar la clase como un tipo que es la forma en que lo estás usando. Entonces, ya sea que Hero sea una interfaz o una clase, no importa porque lo estés utilizando como un tipo.

class Hero { id: number; name: string }

o

interface Hero { id: number; name: string }

Lo siguiente no importa si Hero es una clase o interfaz

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

Donde la interface y la class diferenciada es que la interface es solo para usted, no se transfiere a javascript. Una class hace y no puedes new una new interface .

Constructor o no Constructor, si es new , entonces es una instanceof . Inténtalo de nuevo con esto

let hero = new Hero();

Tu instanceof registro será true porque creaste una instancia de Hero con la palabra clave new .


Sé que esta pregunta ha sido respondida antes, pero en lo que respecta al código orientado a objetos, siempre fue así.

Creo que puedes hacer esto sin un constructor:

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

pero si desea crear una instancia con el constructor, puede hacer esto en la clase

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 }

Y hacer esto con la implementación.

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