在TypeScript中覆盖函数

时间:2015-12-12 09:54:36

标签: javascript typescript typescript1.7

TypeScript:view on playground

alert = (function (origAlert) {
    return function (...messages: any[]) {
        origAlert(messages.join(" "))
    }
})(alert)

// Example
alert(1, 2)

我想覆盖/重新定义alert(message?: any)之前已在lib.d.ts中声明的函数declare function alert(message?: any): void;alert = function...

但是Invalid left-hand side of assignment expression.会引发" function alert(...messages: any[]) { /* ... */ } "

重点是,alert 可以工作 *甚至不起作用,但我需要使用原始的const origAlert = alert。而且我不喜欢在函数之前定义一个额外的Overload signatures must all be ambient or non-ambient

我该怎么做?

请注意,Playground中编译的JavaScript按预期工作。

*在TypeScript Playground上可行,但在Visual Studio中它会抛出" $x = "asdgfhtjshhhhhhhhhasdasdasdass asd"; $result = substr(implode("", preg_split('/\s+/', $x)), 0, 40); "

1 个答案:

答案 0 :(得分:1)

declare function alert(...messages: any[]): void;

window.alert = ((orig) => {
    return (...messages: any[]) => orig(messages.join(" "));
})(alert);

alert(1, 2)