У меня есть приложение, которое требует интенсивной фильтрации данных на стороне клиента, поэтому очень важно использовать веб-работников для обеспечения плавности пользовательского интерфейса. У меня есть веб-работник, работающий на один из моих фильтров, и у меня возникают проблемы с IE, когда моя машинопись не компилируется до es5 для веб-работника.
Я читал в Интернете и в стеке, что, поскольку веб-работники будут работать в отдельном контексте выполнения, они не будут иметь доступа к полифиллам angular.
Я знаю, что мой веб-работник работает в IE11, потому что я могу войти в контекст веб-работника и увидеть его в консоли. Я также получаю эту ошибку, означающую, что мой TS не получил преобразование в правильную версию js.
Ошибка от работника
Что я ' Мы попробовали вручную включить полифилл для этой указанной c ошибки из документации Mozilla, и она не сработала.
Если у кого-то есть какие-либо идеи по этому поводу, это было бы очень полезно: D
это мой tsconfig для моего работника
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/worker",
"lib": [
"ES2018",
"webworker"
],
"target": "es5",
"types": []
},
"include": [
"src/**/*.worker.ts"
]
}
это мой глобальный файл tsconfig для angular приложения
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"module": "esnext",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types",
"node"
],
"lib": [
"es2018",
"dom"
],
"resolveJsonModule": true,
}
}
и это мой работник, который выполняет некоторую фильтрацию
/// <reference lib="webworker" />
addEventListener('message', ({ data }) => {
let filteredData = data[0];
const params = data[1];
const excludedFilters = ['level', 'sol_id', 'dac_name'];
const location = params['dac_name'];
for (let param of Object.entries(params)) {
const key = param[0] as string;
const val = param[1] as string;
if (!excludedFilters.includes(key)) {
filteredData = data[0].filter(obj => obj[key] === val)
}
}
if (location) {
if (location != 'All Data Centres') {
filteredData = filteredData.filter(obj => obj['dac_name'] === location)
}
}
postMessage(filteredData)
});
РЕДАКТИРОВАТЬ: После включения polyfills вручную, в IE11 я получаю эту ошибку: новая ошибка
Ошибка теперь говорит работник. Вместо работника. js