web-dev-qa-db-ja.com

タイプコンストラクター、コンストラクターなしのクラスを使用

Angular Webサイトで「ヒーローズツアー」チュートリアルを操作しているときに、次の構文が見つかりました(まもなく):

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

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

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

これを行うことのポイントは何でしょうか? 「aHero」のタイプを確認すると、それは一般的なオブジェクトであり、「Hero」タイプではありません。コンストラクタでオブジェクトを初期化する方が良いでしょうか?:

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

あなたはそれを使用している方法であるタイプとしてクラスを使用することができます。したがって、Heroがインターフェイスであるかクラスであるかは、タイプとして使用しているため重要ではありません。

class Hero { id: number; name: string }

または

interface Hero { id: number; name: string }

以下は、ヒーローがクラスであるかインターフェースであるかは関係ありません

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

interfaceclassの違いはinterfaceがあなただけのものであり、javascriptに変換されません。 classはそうであり、newinterfaceは使用できません。

コンストラクターまたはコンストラクターなし。newの場合、instanceofです。これでもう一度試してください

let hero = new Hero();

instanceofログはtrueになります。これは、キーワードnewを使用してHeroのインスタンスを作成したためです。

12
lock42

この質問は以前に回答されたことを知っていますが、オブジェクト指向コードに関する限り、これは常にこのようなものでした。

私はあなたがコンストラクタなしでこれを行うことができると信じています:

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

しかし、コンストラクタでインスタンス化する場合は、クラスでこれを行うことができます

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
}

そして、実装でこれを行います

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