[英]adding to an existing Object prototype in typescript
我正在使用出色的Wallaby測試解決方案來運行實時測試,但默認情況下,它會攔截stdout和stderr (有充分的理由)。 在不希望發生這種情況的情況下,可以通過將變量塞入console
命令中來覆蓋行為,如下所示:
console._restored = true;
這將由Wallaby測試跑步者接聽,並將事件流暫時發送回其正常目的地。 這個解決方案很好用,但是Typescript不滿意:
我試圖找到某種方式添加到“控制台”界面的原型定義中。
在我的第一次粗略嘗試中,我只是查找了Console的_restored
定義,並添加了_restored
屬性並將其添加到我的測試幫助文件中:
與絕望的大多數情況一樣,它以眼淚告終。 顯然,已經定義的全局定義仍在使用。
無論如何,任何幫助將不勝感激。
我最初的嘗試實際上接近正確。 您可以將界面Console
重新定義為:
// tslint:disable-next-line
interface Console {
_restored: boolean;
Console: typeof NodeJS.Console;
assert(value: any, message?: string, ...optionalParams: any[]): void;
dir(obj: any, options?: {showHidden?: boolean, depth?: number, colors?: boolean}): void;
error(message?: any, ...optionalParams: any[]): void;
info(message?: any, ...optionalParams: any[]): void;
log(message?: any, ...optionalParams: any[]): void;
time(label: string): void;
timeEnd(label: string): void;
trace(message?: any, ...optionalParams: any[]): void;
warn(message?: any, ...optionalParams: any[]): void;
}
但是,還必須將console
聲明為新定義的接口:
declare var console: Console;
在我的測試幫助文件中定義了此函數之后,我現在可以添加以下功能而不會出現錯誤:
export function restoreStdoutAndStderr() {
console._restored = true;
}
使用要添加的屬性擴展Console界面,以便在Playground中工作:
interface Console {
_restored: boolean;
}
console._restored = true;
您可以看到它在這里工作。
但是,當您使用模塊時,這似乎不起作用。 在這種情況下,您必須在.d.ts文件中定義控制台界面。
interface Console {
_restored: boolean;
}
Anywhereelse.ts:
import * as something from './something';
console._restored = true;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.