2017-02-20 7 views
4

Это то, что я пытаюсь сделать:машинопись возвращаемый тип унаследованного класса

class Base{ 
    clone(){ 
     //return new instance of the inherited class 
    } 
} 

class Derived extends Base{ 
} 

const d1=new Derived(); 
const d2=d2.clone; // I want d2 to be of type Derived 

Каким должен быть тип возвращаемого значения метода клонирования для d2 быть типа Derived?

ответ

2

Я действительно надеюсь, что это лучший способ, но вот то, что я в настоящее время сделать:

class Base{ 
    clone(): this { 
     return new (this.constructor as any)(); 
    } 
} 

class Derived extends Base { 
} 

class DerivedAgain extends Derived { 

} 

const d1=new Derived(); 
const d2 = d1.clone(); 
const d3 = new DerivedAgain().clone(); 

d2 имеет тип Derived и d3 имеет тип DerivedAgain, как и ожидалось.

+1

Это замечательно. Благодарю. – ziv

+0

Так просто, так эффективно. +1 –

Смежные вопросы