Angular 在 web worker 中导入 tensorflow 时的 typescript typecheck 问题
Angular typescript typecheck issues when importing tensorflow in web worker
我正在尝试在 angular 项目的网络工作者中使用 tensorflow/tfjs (TF)。
使用 ng generate worker
命令创建网络工作者工作得很好。
在组件中导入 TF 也可以。
但是在 worker 中导入 TF 即:
import * as tf from '@tensorflow/tfjs'
在通过 ng build
命令构建时生成一堆缺少定义的错误。缺失类型通常是 DOM 相关类型,例如 error TS2304: Cannot find name ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement
。
这些类型在 TF 的某些定义中使用,据我了解,这些类型无法通过网络工作者访问,因为 DOM manipulation cannot be done from workers。
我对此非常满意,我对 TF 的使用不依赖于这些类型。但我仍然需要找到一种方法来构建我的工人。
因此,我尝试修改 tsconfig.worker.json
文件。我的第一次尝试是通过在 compilerOptions.lib
数组中添加“dom”来模仿其他 tsconfig* 文件:
["es2018", "webworker"]
替换为
["es2018", "webworker", "dom"]
这会导致类型定义冲突
error TS6200: Definitions of the following identifiers conflict with those in another file
webworker 和 dom 库对相同类型有不同的定义,但我当然不能删除网络工作者库参考。
我的第二次尝试是在 tsconfig.worker.json
文件中添加 skipTypeCheck
编译器选项:
效果很好,我在我的 web worker 中得到了 TF 运行 并输出了结果。
但是...
跳过类型检查感觉就像撕毁了使用打字稿的整个想法。所以我的问题是:
在 angular 的 webworker 中,是否有一种更简洁的方法可以在保留类型检查的同时使用 TF?
感谢您的回答。如果我应该提供更多配置详细信息,请告诉我。
来自TensorFlow官方教程:https://www.tensorflow.org/js/tutorials/setup
When using TypeScript you may need to set skipLibCheck: true in your tsconfig.json file if your project makes use of strict null checking or you will run into errors during compilation.
这比 skipTypeCheck
更好,因为代码中的类型仍然会被检查。这样代码可以编译,但您仍然会在控制台中收到错误消息:Error when getting WebGL context: Error: Cannot create a canvas in this context
.
但到目前为止这不是问题。
我正在尝试在 angular 项目的网络工作者中使用 tensorflow/tfjs (TF)。
使用 ng generate worker
命令创建网络工作者工作得很好。
在组件中导入 TF 也可以。
但是在 worker 中导入 TF 即:
import * as tf from '@tensorflow/tfjs'
在通过 ng build
命令构建时生成一堆缺少定义的错误。缺失类型通常是 DOM 相关类型,例如 error TS2304: Cannot find name ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement
。
这些类型在 TF 的某些定义中使用,据我了解,这些类型无法通过网络工作者访问,因为 DOM manipulation cannot be done from workers。
我对此非常满意,我对 TF 的使用不依赖于这些类型。但我仍然需要找到一种方法来构建我的工人。
因此,我尝试修改 tsconfig.worker.json
文件。我的第一次尝试是通过在 compilerOptions.lib
数组中添加“dom”来模仿其他 tsconfig* 文件:
["es2018", "webworker"]
替换为
["es2018", "webworker", "dom"]
这会导致类型定义冲突
error TS6200: Definitions of the following identifiers conflict with those in another file
webworker 和 dom 库对相同类型有不同的定义,但我当然不能删除网络工作者库参考。
我的第二次尝试是在 tsconfig.worker.json
文件中添加 skipTypeCheck
编译器选项:
效果很好,我在我的 web worker 中得到了 TF 运行 并输出了结果。
但是...
跳过类型检查感觉就像撕毁了使用打字稿的整个想法。所以我的问题是:
在 angular 的 webworker 中,是否有一种更简洁的方法可以在保留类型检查的同时使用 TF?
感谢您的回答。如果我应该提供更多配置详细信息,请告诉我。
来自TensorFlow官方教程:https://www.tensorflow.org/js/tutorials/setup
When using TypeScript you may need to set skipLibCheck: true in your tsconfig.json file if your project makes use of strict null checking or you will run into errors during compilation.
这比 skipTypeCheck
更好,因为代码中的类型仍然会被检查。这样代码可以编译,但您仍然会在控制台中收到错误消息:Error when getting WebGL context: Error: Cannot create a canvas in this context
.
但到目前为止这不是问题。