抽象基礎有一個方法,該方法采用基礎/派生并在其上執行某些操作。好像我在打字時遺漏了一些東西,試圖找出什么。
嘗試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);
});
};
}
錯誤:“(派生:派生)=> void”型別的引數不可分配給“(baseOrDerived:Base)=> void”型別的引數。引數“派生”和“baseOrDerived”的型別不兼容。“Base”型別中缺少屬性“doIt”,但在“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)
uj5u.com熱心網友回復:
操場
由于您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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/463788.html
標籤:javascript 打字稿 遗产 抽象的
上一篇:Nextjs:多重調度和承諾
