2017-09-06 3 views
0

제네릭 형식 (이 경우 Dog)을 사용하여 클래스 내 개체 유형을 제한하려고하는 간단한 클래스가 있습니다. 나는 잘못된 형식을 전달하기 때문에 여기 box.put (cat) 컴파일 오류를 볼 것으로 예상되지만, 불행히도, 나는 아무것도 볼 수 없습니다.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 도와 줘서 기쁩니다. 답변으로 표시하는 것을 잊지 마세요 :) –

관련 문제