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) {}
}
あなたはそれを使用している方法であるタイプとしてクラスを使用することができます。したがって、Heroがインターフェイスであるかクラスであるかは、タイプとして使用しているため重要ではありません。
class Hero { id: number; name: string }
または
interface Hero { id: number; name: string }
以下は、ヒーローがクラスであるかインターフェースであるかは関係ありません
let hero: Hero = { id: 1, name: 'me' }
interface
とclass
の違いはinterface
があなただけのものであり、javascriptに変換されません。 class
はそうであり、new
とinterface
は使用できません。
コンストラクターまたはコンストラクターなし。new
の場合、instanceof
です。これでもう一度試してください
let hero = new Hero();
instanceof
ログはtrue
になります。これは、キーワードnew
を使用してHeroのインスタンスを作成したためです。
この質問は以前に回答されたことを知っていますが、オブジェクト指向コードに関する限り、これは常にこのようなものでした。
私はあなたがコンストラクタなしでこれを行うことができると信じています:
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' }