我在我的错误日志代码中有以下javascript,它为某些浏览器定义了console.log
,但它不存在(IE没有/没有定义它,除非调试工具打开)。
if (typeof console == "undefined")
{
window.console = { log: function (msg) { } };
}
尝试将js升级到Typescript时的问题是window.console
被定义为Console
接口类型,并且由于我没有指定所有内容(显然)不编译。
interface Console {
info(message?: any, ...optionalParams: any[]): void;
profile(reportName?: string): void;
assert(test?: boolean, message?: string, ...optionalParams: any[]): void;
msIsIndependentlyComposed(element: Element): boolean;
clear(): void;
dir(value?: any, ...optionalParams: any[]): void;
warn(message?: any, ...optionalParams: any[]): void;
error(message?: any, ...optionalParams: any[]): void;
log(message?: any, ...optionalParams: any[]): void;
profileEnd(): void;
}
怎么能告诉它忽略这个接口,只让我重新定义window.console
。
My best effort guess doesn't work
window.console = { log: function (msg) { } } : any;
更短的解决方案是使用类型断言:
window.console = <any>{ log: function (msg) { } };
甚至使用lambda:
window.console = <any>{ log: () => { } };
该接口将强制您创建所有函数。如果你试图覆盖接口,它会给你一个Duplicate Identifier
错误。所以,这里是完整的存根,以节省您的时间:)
window.console =
{
info: (message?: any, ...optionalParams: any[]) =>
{
// ...
},
profile: (reportName?: string) =>
{
// ...
},
assert: (test?: boolean, message?: string, ...optionalParams: any[]) =>
{
// ...
},
msIsIndependentlyComposed: (element: Element) =>
{
return false;
},
clear: () =>
{
// ...
},
dir: (value?: any, ...optionalParams: any[]) =>
{
// ...
},
warn: (message?: any, ...optionalParams: any[]) =>
{
// ...
},
error: (message?: any, ...optionalParams: any[]) =>
{
// ...
},
log: (message?: any, ...optionalParams: any[]) =>
{
// ...
},
profileEnd: () =>
{
// ...
},
count: (countTitle?: string) =>
{
// ...
},
groupEnd: () =>
{
// ...
},
time: (timerName?: string) =>
{
// ...
},
timeEnd: (timerName?: string) =>
{
// ...
},
trace: () =>
{
// ...
},
group: (groupTitle?: string) =>
{
// ...
},
dirxml: (value: any) =>
{
// ...
},
debug: (message?: string, ...optionalParams: any[]) =>
{
// ...
},
groupCollapsed: (groupTitle?: string) =>
{
// ...
},
select: (element: Element) =>
{
// ...
},
};
替代解决方案
如果你不想写出所有的方法,你可以这样欺骗TypeScript。
var x: any =
{
log: (msg) =>
{
//...
}
};
window.console = <Console>x;
我想我可以这样做:-/
var w:any = window;
w.console = { log: function (msg) { } };