我在 JavaScript 中使用了如下所示的實作。
class Base {
installGetters() {
Object.defineProperty(this, 'add', {
get() {
return 5;
}
});
}
}
class New extends Base {
constructor() {
super();
this.installGetters();
}
someAddition() {
return 10 this.add;
}
}
我已經add在父類的函式中定義了 getter 屬性-Base并在子類建構式中New呼叫該installGetters()函式后在子類中使用該屬性。這適用于 JavaScript,但this.add在 Typescript 的情況下會引發錯誤。任何幫助將非常感激。
我這樣做的主要動機是我想將一個物件傳遞給installGetters()它,以便它可以生成多個 getter,物件鍵是 getter 名稱和從相應的 getter 函式回傳的值。
這在 JavaScript 中有效,所以我主要的好奇心是這在 TypeScript 中是不可能的還是我做錯了什么。
uj5u.com熱心網友回復:
盡管這是一個非常奇怪的模式,但我會為您的實際問題提供答案。
TypeScript 不夠聰明,無法Base根據在子類建構式上呼叫的方法推斷實際型別,因此您必須這樣declare做:
declare readonly add: number;
打字稿游樂場
uj5u.com熱心網友回復:
造成這種情況的原因可能是打字稿不知道您添加的 getter。沒有打字告訴打字稿這個 getter 存在,打字稿無法神奇地知道您添加了 getter 函式及其外觀。要么在基類中定義 getter,要么在不可能的情況下,除了將其強制轉換為 any 之外別無他法。
someAddition() {
return 10 (this as any).add
}
uj5u.com熱心網友回復:
應用繼承后,我建議使用protected:
受保護的成員僅對宣告它們的類的子類可見。
class Base {
protected add!: number;
installGetters() {
this.add = 5;
}
}
與您的問題相關的問題:https : //github.com/microsoft/TypeScript/issues/28694
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/377278.html
標籤:javascript 打字稿 目的 定义属性
下一篇:動態渲染多個SVG圖示
