2015-12-12 3 views
0

Машинопись: 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 перед функцией.

Как я могу это сделать?


Обратите внимание, что скомпилированный JavaScript на игровой площадке работает по назначению.

* на машинопись площадка работает, но в Visual Studio он бросает «Overload signatures must all be ambient or non-ambient»

+0

Я не знаю, что предполагаемое использование вашего кода. Однако, если вам это нужно для отладки, я просто использую 'console.log()'. В противном случае, это плохая идея переопределить собственные функции, часто это вызывает неприятные последствия. –

ответ

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

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

alert(1, 2) 
+0

Этот хак работает для этого, спасибо ^^ Я все еще надеюсь, что кто-то найдет общее решение – CoderPi

+0

эти сообщения об ошибках недостаточно ясны - посмотрите на https://github.com/Microsoft/TypeScript/issues/2474. Я сомневаюсь, что кто-то сделает общее решение. P.S. Я надеюсь, что я ошибаюсь) – RomkaChev

+0

Также игровая площадка компилирует его так же, как и нужно .. это действительно странно – CoderPi

Смежные вопросы