TS 0.9.5中的window.onerror是不可能的。 :)

时间:2013-12-10 16:43:29

标签: typescript

这个游乐场链接过去常常在TS 0.9.5之前工作,现在我无法弄清楚如何使它适用于我的生活。

http://www.typescriptlang.org/Playground/#src=window.onerror=%20function%28eventOrMessage%3a%20any,%20source%3a%20string,%20fileno%3a%20number%29%7B%0A%09//%20place%20your%20body%20here%20%0A%7D;

本质:

window.onerror= function(eventOrMessage: any, source: string, fileno: number){
    // place your body here 
};

...返回错误:

  

错误8无法转换'(eventOrMessage:any,source:string,fileno:   数字)=> void'to'ErrorEventHandler':调用类型的签名   '(eventOrMessage:any,source:string,fileno:number)=>无效'和   'ErrorEventHandler'不兼容。

3 个答案:

答案 0 :(得分:5)

史蒂夫芬顿提到。或者,您可以使用两个函数之间的公共签名:

window.onerror= function(eventOrMessage: any, source: string, fileno: number, colnumber?:number):any{
    // place your body here 
};

答案 1 :(得分:3)

这看起来像lib.d.ts中的一个错误(甚至可能是编译器) - 因为它们已经更改了最新分支中ErrorEventHandler的定义。

在0.9.5中它是:

interface ErrorEventHandler {
    (event: Event, source: string, fileno: number, columnNumber: number): void;
    (message: any, uri: string, lineNumber: number, columnNumber?: number): boolean;
}

但是在主分支中它是:

interface ErrorEventHandler {
    (event: Event, source: string, fileno: number, columnNumber: number): void;
}

与此同时,您可以使用以下hack(或编辑您的lib.d.ts文件来更新它)。

interface TempErrorEventHandler {
    (event: Event, source: string, fileno: number, columnNumber: number): void;
}

var test1: TempErrorEventHandler =
    function (event: Event, source: string, fileno: number, columnNumber: number): void {

    }

window.onerror = <ErrorEventHandler> test1;

答案 2 :(得分:0)

基于basarat解决方案(我只是添加可选的错误参数,可能会有所帮助):

window.onerror = function(errorMsg: any, url: string, lineNumber: number, colNumber: number, error: { stack?: string } = null) {
    // .. error handler
};