使用静态方法的打字稿继承
typescript inheritance using static method
有没有办法使用下面描述的方法获得正确的类型。我试过了
使 makeInstance() 通用但我还没有获得扩展类型。下面的代码。
class Base {
name = 'foo';
static makeInstance() {
return new this();
}
}
class Extended extends Base {
age = 10;
}
let base = Base.makeInstance() // is Base
let extended = Extended.makeInstance(); //should be Extended
console.log(base.name);//ok
console.log(extended.age); //output ok; age doesn't exists
console.log(extended.name);// ok
您可以向静态方法添加泛型参数以推断正确调用该方法的 class :
class Base {
name = 'foo';
static makeInstance<T>(this: new () => T) {
return new this();
}
}
class Extended extends Base {
age = 10;
}
let base = Base.makeInstance() // is Base
let extended = Extended.makeInstance(); //is Extended
console.log(base.name);//ok
console.log(extended.age); //ok
console.log(extended.name);// ok
有没有办法使用下面描述的方法获得正确的类型。我试过了 使 makeInstance() 通用但我还没有获得扩展类型。下面的代码。
class Base {
name = 'foo';
static makeInstance() {
return new this();
}
}
class Extended extends Base {
age = 10;
}
let base = Base.makeInstance() // is Base
let extended = Extended.makeInstance(); //should be Extended
console.log(base.name);//ok
console.log(extended.age); //output ok; age doesn't exists
console.log(extended.name);// ok
您可以向静态方法添加泛型参数以推断正确调用该方法的 class :
class Base {
name = 'foo';
static makeInstance<T>(this: new () => T) {
return new this();
}
}
class Extended extends Base {
age = 10;
}
let base = Base.makeInstance() // is Base
let extended = Extended.makeInstance(); //is Extended
console.log(base.name);//ok
console.log(extended.age); //ok
console.log(extended.name);// ok