如何扩展新继承的TypeScript知识?
如何使TypeScript知道在如何扩展新继承的TypeScript知识?,typescript,Typescript,如何使TypeScript知道在Factory类的Base变量中发生的所有继承,这样就不会出现错误。这肯定是可能的,因为我在最后得到了结果,但是类型“Rect”上不存在属性“X”会抛出错误 接口可打印{ print():无效; } 接口可读取{ log():void; } 类工厂IShape>{ 构造函数(公共基:T){} 可打印(){ this.Base=类扩展了这个。Base实现了IPrintable{ 打印(){ log(`${this.x}:${this.y}`); } } 归还这个;
Factory
类的Base
变量中发生的所有继承,这样就不会出现错误。这肯定是可能的,因为我在最后得到了结果,但是类型“Rect”上不存在属性“X”会抛出错误
接口可打印{
print():无效;
}
接口可读取{
log():void;
}
类工厂IShape>{
构造函数(公共基:T){}
可打印(){
this.Base=类扩展了这个。Base实现了IPrintable{
打印(){
log(`${this.x}:${this.y}`);
}
}
归还这个;
}
Loggable(){
this.Base=类扩展了this.Base实现了ILogable{
日志(){
log(`${this.x}:${this.y}`);
}
}
归还这个;
}
}
界面IShape{
x:号码,,
y:号码
}
类Rect实现了IShape{
建造师(
公共x:号码,
公众y:号码
) {}
}
const RectMaxed=新工厂(Rect).Printable().Loggable().Base;
const rectMaxed=新rectMaxed(10,20);
rectMaxed.print();
rectMaxed.log();
每次添加方法时,都需要创建工厂的新实例。请尝试以下代码:
interface IPrintable {
print(): void;
}
interface ILoggable {
log(): void;
}
type Constructor<T> = new (...args: any[]) => T;
class Factory<T extends new (...args: any) => IShape> {
constructor(public Base: T) {}
Printable() {
return new Factory<T & Constructor<IPrintable>>(class extends this.Base implements IPrintable {
print() {
console.log(`${this.x}:${this.y}`);
}
});
}
Loggable() {
return new Factory<T & Constructor<ILoggable>>(class extends this.Base implements ILoggable {
log() {
console.log(`${this.x}:${this.y}`);
}
});
}
}
interface IShape {
x: number,
y: number
}
class Rect implements IShape {
constructor(
public x: number,
public y: number
) {}
}
const RectMaxed = new Factory(Rect).Printable().Loggable().Base;
const rectMaxed = new RectMaxed(10, 20);
rectMaxed.print();
rectMaxed.log();
接口可打印{
print():无效;
}
接口可读取{
log():void;
}
类型构造函数=new(…参数:any[])=>T;
类工厂IShape>{
构造函数(公共基:T){}
可打印(){
return new Factory(类扩展了它。Base实现了IPrintable{
打印(){
log(`${this.x}:${this.y}`);
}
});
}
Loggable(){
return new Factory(类扩展了它。基实现了ILOGABLE{
日志(){
log(`${this.x}:${this.y}`);
}
});
}
}
界面IShape{
x:号码,,
y:号码
}
类Rect实现了IShape{
建造师(
公共x:号码,
公众y:号码
) {}
}
const RectMaxed=新工厂(Rect).Printable().Loggable().Base;
const rectMaxed=新rectMaxed(10,20);
rectMaxed.print();
rectMaxed.log();
我添加了一个新类型构造函数
,它指示一个类。你也可以试试