web-dev-qa-db-fra.com

Typescript, utilisation de classes sans constructeur

En travaillant avec le tutoriel "Tour of Heroes" sur le site Web Angular, j'ai trouvé la syntaxe suivante (sous peu):

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

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

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

Quel serait le point en faisant cela? quand si je vérifie le type de "aHero", c'est seulement un objet commun et pas un type "Hero". Serait-il préférable d'initialiser un objet avec un constructeur?

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

Vous pouvez utiliser la classe comme un type correspondant à votre utilisation. Donc, si Hero est une interface ou une classe, peu importe, vous l'utilisez comme type.

class Hero { id: number; name: string }

ou

interface Hero { id: number; name: string }

Ce qui suit ne concerne pas si Hero est une classe ou une interface

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

interface et class différencier est interface est uniquement pour vous, il n'est pas transpilé en javascript. Un class fait et vous ne pouvez pas new un interface

Constructeur ou non Constructeur, si vous new c'est une instanceof. Essayez encore avec ça

let hero = new Hero();

Votre journal instanceof sera true car vous avez créé une instance de Hero avec la clé Word new.

12
lock42

Je sais que cette question a déjà reçu une réponse, mais en ce qui concerne le code orienté objet, cela a toujours été comme cela.

Je crois que vous pouvez le faire sans constructeur:

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

mais si vous voulez instancier avec le constructeur, vous pouvez le faire dans la classe

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
}

Et le faire avec la mise en œuvre

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