2017-09-06 22 views
0

ジェネリック型(この場合はDog)を使用してクラス内のオブジェクトのタイプを制約しようとしているような単純なクラスがあります。私は間違った型を渡すので、ここではコンパイルエラーを表示することを期待しています。残念ながら、私は何も見ません。TypeScriptでジェネリッククラスが検出されない

class Box<T>{ 
    content: Array<T> = []; 

    put(animal: T){ 
     this.content.push(animal); 
    } 
} 

var dog = new Dog(); 
var cat = new Cat(); 

var box = new Box<Dog>(); 
box.put(cat); 

答えて

4

Typescriptは型互換性を判断するために構造的互換性を使用します。 DogCatCatDogのすべてのフィールドを持っているため、互換性があるため、これらの定義は

class Dog{ name: string } 
class Cat{ name: string; lives: number } 

あなたのコードは動作します持っているのであれば、あなたのコードを与えられました。

あなたは、このようなクラスを定義した場合: Dogフィールドを持っているので

class Dog{ name: string; isAsGoodBoy: boolean } 
class Cat{ name: string; lives: number } 

あなたのコードは、もはや仕事、Catにはないだろう。

あなたがJavascriptをよく知っているなら、それについて考えるのに便利な方法は、構造的な型付けがダックタイピングのコンパイル時バージョンであることです。

+0

ありがとうございました。 – zdimon77

+0

@ zdimon77困ったことに、喜んで答えてマークするのを忘れないでください:) –

関連する問題