Typescript - 尝试以派生类型作为参数在抽象基础上调用方法
Typescript - Trying to call method on abstract base with derived type as parameter
抽象基类有一个方法接受 base/derived 并在其上执行某些操作。
好像我在打字时遗漏了一些东西,试图找出什么。
尝试 1:
abstract class Base {
protected runFuncOnThis = (func: (baseOrDerived: Base) => void) => {
func(this);
};
}
class Derived extends Base {
public doIt = () => {
this.runFuncOnThis((derived: Derived) => { // ERROR HERE
console.log(derived);
});
};
}
错误:
“(derived: Derived) => void”类型的参数不可分配给“(baseOrDerived: Base) => void”类型的参数。
参数类型 'derived' 和 'baseOrDerived' 不兼容。
属性 'doIt' 在类型 'Base' 中缺失,但在类型 'Derived'.ts(2345)
中是必需的
尝试 2:
abstract class Base2 {
protected runFuncOnThis = <T extends Base2>(func: (baseOrDerived: T) => void) => {
func(this); // ERROR HERE
};
}
class Derived2 extends Base2 {
public doIt = () => {
this.runFuncOnThis((derived: Derived2) => {
console.log(derived);
});
};
}
错误:'this' 类型的参数不可分配给 'T' 类型的参数。
'this' 可分配给类型 'T' 的约束,但 'T' 可以用约束的不同子类型实例化 'Base2'.ts(2345)
由于您在箭头函数中使用 this
,这意味着 this
是当前上下文 (Base
) 同时 func
需要 Derived
作为它的论据。将方法类型更改为普通函数(具有自己的上下文)并将 this
定义为 T extends Base
以满足 func 的参数。
abstract class Base {
protected runFuncOnThis<T extends Base>(this: T, func: (baseOrDerived: T) => void) {
func(this);
};
}
class Derived extends Base {
public doIt = () => {
this.runFuncOnThis((derived) => {
console.log(derived);
});
};
}
class Derived2 extends Base {
public doIt = () => {
this.runFuncOnThis((derived) => {
console.log(derived);
});
};
public someProperty = 123;
}
抽象基类有一个方法接受 base/derived 并在其上执行某些操作。 好像我在打字时遗漏了一些东西,试图找出什么。
尝试 1:
abstract class Base {
protected runFuncOnThis = (func: (baseOrDerived: Base) => void) => {
func(this);
};
}
class Derived extends Base {
public doIt = () => {
this.runFuncOnThis((derived: Derived) => { // ERROR HERE
console.log(derived);
});
};
}
错误: “(derived: Derived) => void”类型的参数不可分配给“(baseOrDerived: Base) => void”类型的参数。 参数类型 'derived' 和 'baseOrDerived' 不兼容。 属性 'doIt' 在类型 'Base' 中缺失,但在类型 'Derived'.ts(2345)
中是必需的尝试 2:
abstract class Base2 {
protected runFuncOnThis = <T extends Base2>(func: (baseOrDerived: T) => void) => {
func(this); // ERROR HERE
};
}
class Derived2 extends Base2 {
public doIt = () => {
this.runFuncOnThis((derived: Derived2) => {
console.log(derived);
});
};
}
错误:'this' 类型的参数不可分配给 'T' 类型的参数。 'this' 可分配给类型 'T' 的约束,但 'T' 可以用约束的不同子类型实例化 'Base2'.ts(2345)
由于您在箭头函数中使用 this
,这意味着 this
是当前上下文 (Base
) 同时 func
需要 Derived
作为它的论据。将方法类型更改为普通函数(具有自己的上下文)并将 this
定义为 T extends Base
以满足 func 的参数。
abstract class Base {
protected runFuncOnThis<T extends Base>(this: T, func: (baseOrDerived: T) => void) {
func(this);
};
}
class Derived extends Base {
public doIt = () => {
this.runFuncOnThis((derived) => {
console.log(derived);
});
};
}
class Derived2 extends Base {
public doIt = () => {
this.runFuncOnThis((derived) => {
console.log(derived);
});
};
public someProperty = 123;
}