在 Web Worker 中导入 Tensorflow 时出现 Angular TypeScript 类型检查问题

2024-04-17

我正在尝试在有角度的项目中的网络工作人员中使用tensorflow/tfjs(TF)。

使用以下命令创建网络工作者ng generate worker命令工作得很好。

在组件中导入 TF 也很好。

但是,在工作人员中导入 TF,即:

import * as tf from '@tensorflow/tfjs'

通过构建时生成一堆缺失的定义错误ng build命令。缺少的类型通常是与 DOM 相关的类型,例如error TS2304: Cannot find name ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement。 这些类型用于 TF 中的某些定义,据我所知,网络工作者无法访问这些类型,因为DOM 操作不能由工人完成 https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers。 我对此非常满意,我对 TF 的使用并不依赖于这些类型。但我仍然需要找到一种方法来构建我的工人。

因此我尝试修补tsconfig.worker.json文件。我的第一次尝试是通过在compilerOptions.lib array :

["es2018", "webworker"] 

取而代之

["es2018", "webworker", "dom"]

这会导致类型定义冲突

error TS6200: Definitions of the following identifiers conflict with those in another file 

the 网络工作者 and domlibs 对于相同类型有不同的定义,但我当然不能删除 webworker lib 引用。

我的第二次尝试是添加skipTypeCheck中的编译器选项tsconfig.worker.json file : 效果很好,我让 TF 在我的网络工作线程中运行并输出结果。

BUT...

跳过类型检查感觉就像撕毁了使用打字稿的整个想法。所以我的问题是:

有没有一种更干净的方法可以在 Angular 的网络工作者中使用 TF,同时保留类型检查?

感谢您的回答。如果我应该提供更多配置详细信息,请告诉我。


来自官方 TensorFlow 教程:https://www.tensorflow.org/js/tutorials/setup https://www.tensorflow.org/js/tutorials/setup

使用 TypeScript 时,如果您的项目使用严格的 null 检查,您可能需要在 tsconfig.json 文件中设置skipLibCheck: true,否则您将在编译过程中遇到错误。

这比skipTypeCheck因为代码中的类型仍在检查。这样代码可以编译,但控制台中仍然会出现错误:Error when getting WebGL context: Error: Cannot create a canvas in this context.

但到目前为止这还不是问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Web Worker 中导入 Tensorflow 时出现 Angular TypeScript 类型检查问题 的相关文章

随机推荐