当我试图将邮件返回到源代码时,Typescript会抱怨
这是我的密码当我试图将邮件返回到源代码时,Typescript会抱怨,typescript,Typescript,这是我的密码 window.addEventListener('message', (e) => { e.source.postMessage('hi there, I hear you!', '*'); }); 这就是错误: [ts]无法调用其类型缺少调用签名的表达式。类型“((消息:any,targetOrigin:string,transfer?:any[])=>void)((消息:any,transfer?:any[])=>void)”没有兼容的呼叫签名 当我检查postMe
window.addEventListener('message', (e) => {
e.source.postMessage('hi there, I hear you!', '*');
});
这就是错误:
[ts]无法调用其类型缺少调用签名的表达式。类型“((消息:any,targetOrigin:string,transfer?:any[])=>void)((消息:any,transfer?:any[])=>void)”没有兼容的呼叫签名
当我检查postMessage
时,它似乎是窗口上的一个方法,并且具有签名:
declare function postMessage(
message: any,
targetOrigin: string,
transfer?: any[]
): void;
那看起来很像我的电话签名。那么我的代码有什么问题吗?e.source
的类型是MessageEventSource
type MessageEventSource=WindowProxy | MessagePort | serviceforner代码>
由于只有WindowProxy
具有您正在使用的方法签名,因此您可以使用以下方法对其进行保护:
window.addEventListener('message', (e) => {
if (!(e.source instanceof MessagePort) && !(e.source instanceof ServiceWorker)) {
e.source.postMessage('hi there, I hear you!', '*');
}
});
或者告诉TS您的e.source
类型为WindowProxy | Window
我在这里找到了解决方案:。圣诞节我希望TypeScript能提供更好的错误信息!要直接测试它是否是WindowProxy吗<代码>event.source instanceof Window
对我不起作用