ServiceWorker代码[2345][object]上的TypeScript错误
我正在用TypeScript(2.4.2)编写一个服务人员ServiceWorker代码[2345][object]上的TypeScript错误,typescript,service-worker,Typescript,Service Worker,我正在用TypeScript(2.4.2)编写一个服务人员激活事件处理程序,它看起来像: function activate(event: ExtendableEvent) { event.waitUntil( caches.keys().then(function(cacheNames: Array<string>) { return Promise.all( cacheNames.map(function(cacheName: string
激活事件处理程序,它看起来像:
function activate(event: ExtendableEvent) {
event.waitUntil(
caches.keys().then(function(cacheNames: Array<string>) {
return Promise.all(
cacheNames.map(function(cacheName: string) {
if (!OFFLINE_CACHE_REGEX.test(cacheName)) {
return;
}
if (OFFLINE_CACHE_NAME !== cacheName) {
return caches.delete(cacheName);
}
})
);
})
);
}
功能激活(事件:ExtendableEvent){
event.waitill(
caches.keys().then(函数(cacheNames:Array){
回报你的承诺(
map(函数(cacheName:string){
如果(!OFFLINE_CACHE_REGEX.test(cacheName)){
返回;
}
如果(脱机\u缓存\u名称!==缓存名称){
返回缓存。删除(缓存名称);
}
})
);
})
);
}
这种方法的灵感来自杰克·阿奇博尔德的
问题是,TypeScript编译器抛出了一个错误,结果表明:
../file.ts的路径:40:[2345][object]'
其中,上述代码中的第40行指向退货承诺.all(
虽然我可以猜到错误代码是TS2345,但我无法真正理解这意味着什么,因为我只有一个[object]
任何指针都会非常有帮助!您正在更改cacheNames数组的类型,因为您在第一个if语句中省略了返回值。这将返回未定义的值,因此数组不再仅由字符串组成。将返回值更改为cacheName或空字符串,您就可以了。您确定您的cacheNamesrray是一个数组,而不是一个对象?这也是我的第一直觉。我说它确实应该是一个数组。另外,快速检查cacheNames instanceof array
返回true
。我还缺少什么?谢谢。我刚才才意识到这一点,并修改了我的代码,使用了过滤器和映射到r>的组合删除未定义的项并消除错误。啊,这也是一个很好的解决方案。很高兴它现在已经排序了!:)