2016-10-05 3 views

답변

3

는 T에 동물을 주조, 그것은 작동합니다. (미래의 독자를 위해) 자신의 의견에 따르면

class ZooKeeper<T extends Animal> { 
    constructor(p: T = <T>new Animal()) { 

    } 
} 

당신은 또한 수행 할 수 있습니다

class ZooKeeper<T extends Animal> { 
    constructor(p: T = new Animal() as T) { 

    } 
} 
1

당신은 생성자의 매개 변수 선언에서 지정을 떠날 수는, 나를 위해 제대로 컴파일 것으로 보인다. 매개 변수를 생략 할 수도 있습니다.

UPDATE : 지적series0ne,이 솔루션은 하나가 제공되지 않은 Animal의 기본 인스턴스를 제공하지 않습니다!

class ZooKeeper<T extends Animal> { 
    constructor(p?: T) { 
    } 
} 

var zk = new ZooKeeper<Lion>(new Lion()); 
var zk2 = new ZooKeeper(new Animal()); 
var zk3 = new ZooKeeper(); 

ZooKeeper 클래스는 입력 될 것입니다 그리고 당신은 T의 자식 클래스의 특정 속성에 액세스 할 수 있습니다.

+0

방출 된 JS를 보면 p : T = new Animal()이 제공되지 않은 기본 인스턴스 (Animal)를 방출한다는 것을 알 수 있습니다. 당신의 구현은 이것을하지 않을 것입니다! – series0ne

+0

JS 출력을 보았습니다. 그렇습니다. 차이점이 있습니다. 나는 당신의 질문을 완전히 이해하지 못했습니다, 미안 해요. – ther

+0

문제 없습니다. 학습 곡선의 모든 부분, 내 친구. 내 의견을 반영하도록 답변을 업데이트하는 경우, downvote를 제거합니다. – series0ne