Typescript TS 0.9.5中的window.oner错误是不可能的。:)

Typescript TS 0.9.5中的window.oner错误是不可能的。:),typescript,Typescript,这个操场链接在TS 0.9.5之前就已经开始工作了,现在我不知道如何让它在我的生活中发挥作用 ) 基本上: window.onerror= function(eventOrMessage: any, source: string, fileno: number){ // place your body here }; …返回一个错误: 错误8无法转换“(eventOrMessage:any,source:string,fileno: number)=>void'到'ErrorEven

这个操场链接在TS 0.9.5之前就已经开始工作了,现在我不知道如何让它在我的生活中发挥作用

)

基本上:

window.onerror= function(eventOrMessage: any, source: string, fileno: number){
    // place your body here 
};
…返回一个错误:

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


对我(甚至可能是编译器)来说,这看起来像是
lib.d.ts
中的一个bug,因为他们在最新的分支中更改了
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文件来更新它)

接口TempErrorEventHandler{
(event:event,source:string,fileno:number,columnNumber:number):void;
}
var test1:TempErrorEventHandler=
函数(事件:事件,源:字符串,文件号:编号,列号:编号):void{
}
window.onerror=test1;

如史蒂夫·芬顿所述。或者,您可以在两个函数之间使用公共签名:

window.onerror= function(eventOrMessage: any, source: string, fileno: number, colnumber?:number):any{
    // place your body here 
};
基于basarat解决方案(我只添加可选错误参数,可能会有帮助):


伙计,你很聪明。真聪明。我对TS了解不够,但是有两个这样的无名方法无效吗?window.onerror如何知道调用哪个实现?该接口表示一个具有两个重载的函数-因此TypeScript将检查参数列表以确定调用了这两个函数中的哪一个(然后还将知道相应的返回类型)。我不聪明——虽然TypeScript的人非常聪明——编译器中的类型推理非常棒。史蒂夫和巴萨拉特你们又让我失望了!顺便说一句,这是否作为CodePlex上的一个问题提出?我可以看到:但这是指0.9.1.1。我现在正在努力解决这个问题,但最好能在TS中正确地修复它。在这里的CodePlex上提出了它:因为我看不到它是在其他地方提出的…谢谢bassarat。我从你的回答和史蒂夫·芬顿身上学到了一些东西。我把这个操场脚本放在一起,说明了与这个问题相关的一些有趣的事情。当然,你的答案更清晰,但史蒂夫的答案确实展示了其他让语言更流畅的方式,他是第一个,所以我将他的答案作为公认的答案。
window.onerror= function(eventOrMessage: any, source: string, fileno: number, colnumber?:number):any{
    // place your body here 
};
window.onerror = function(errorMsg: any, url: string, lineNumber: number, colNumber: number, error: { stack?: string } = null) {
    // .. error handler
};