簡體   English   中英

在打字稿中添加到現有的Object原型

[英]adding to an existing Object prototype in typescript

我正在使用出色的Wallaby測試解決方案來運行實時測試,但默認情況下,它會攔截stdoutstderr (有充分的理由)。 希望發生這種情況的情況下,可以通過將變量塞入console命令中來覆蓋行為,如下所示:

console._restored = true;

這將由Wallaby測試跑步者接聽,並將事件流暫時發送回其正常目的地。 這個解決方案很好用,但是Typescript不滿意: ts錯誤消息

我試圖找到某種方式添加到“控制台”界面的原型定義中。

在我的第一次粗略嘗試中,我只是查找了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM