所以我有一個名爲Report的基類,然後我有另一個類從報告稱爲數據表擴展。無法在基類打字稿上調用擴展方法
我寫了Report類的擴展,我希望能夠在我有一個數據表對象時調用它。
簡單的例子:
類在一個文件中寫道
export class Report {
id: number;
name: string;
}
另一類在另一個文件
export class Datasheet extends Report {
description: string;
}
在這裏,我已經寫了報告類的簡單擴展寫道,在不同的文件
import { Report } from './report';
export {};
declare module './report' {
interface Report {
hasName(): boolean;
}
}
Report.prototype.hasName = function() {
return this.name == null || this.name.length > 0;
};
所以現在我創建一個新的數據表,我想調用擴展方法.hasName()
,這在打字稿編譯罰款,但是當它被髮送到瀏覽器中,我得到一個錯誤說
m.hasName不是函數
例如,我將要做到這一點(簡單實例)
const m = new Datasheet();
const check = m.hasName();
爲什麼當編譯好的時候出現錯誤?我正在使用Typescript 2.4.2。
我想寫這個,就像你可以C#對象,並寫入擴展方法。這使我的物體保持乾淨
任何幫助將不勝感激!
有沒有原因你不直接添加'hasName()'方法到Report類? – JasonK
當我將所有內容放入單個文件而無需導入或聲明模塊時,代碼問題適用於我。擴展方法的真名是什麼 - 「hasName」或「hasDescription」?是否在調用'new Datasheet()'之前在瀏覽器中執行對Report.prototype.hasName的賦值? – artem
在您使用它們的文件中,您是否導入模塊擴展?我試過,並在節點上它爲我工作(在聲明中將'hasDescription'更改爲'hasName',假設它是一個錯字) –