웹 워커에서 TensorFlow를 가져올 때 Angular Typescript typecheck 문제

Oct 30 2020

각도 프로젝트의 웹 작업자에서 tensorflow / tfjs (TF)를 사용하려고합니다.

ng generate worker명령을 사용하여 웹 작업자를 만드는 것은 잘 작동합니다.

구성 요소에서 TF를 가져 오는 것도 좋습니다.

그러나 작업자에서 TF 가져 오기 즉 :

import * as tf from '@tensorflow/tfjs'

ng build명령을 통해 빌드 할 때 누락 된 정의 오류를 생성합니다 . 누락 된 유형은 일반적으로 error TS2304: Cannot find name ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement. 이러한 유형은 TF의 일부 정의에서 사용되며 DOM 조작은 작업자에서 수행 할 수 없기 때문에 웹 작업자가 해당 유형에 액세스 할 수 없습니다 . 나는 완벽하게 괜찮습니다. 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 

webworkerDOM libs와 같은 유형의 다른 정의를 가지고,하지만 난 물론 webworker lib 디렉토리 참조를 제거 할 수 없습니다.

두 번째 시도는 파일에 skipTypeCheck컴파일러 옵션 을 추가하는 것이 었습니다 tsconfig.worker.json. 잘 작동 하고 웹 작업자에서 TF를 실행하고 결과를 출력했습니다.

그러나...

유형 검사를 건너 뛰는 것은 typescript 사용에 대한 전체 아이디어를 뜯어내는 것처럼 느껴집니다. 그래서 내 질문은 :

유형 검사를 유지하면서 각도로 웹 워커에서 TF를 사용하는 더 깨끗한 방법이 있습니까?

답변 해주셔서 감사합니다. 더 자세한 구성 정보를 제공해야하는지 알려주세요.

답변

AlexeyInkin Nov 25 2020 at 22:59

공식 TensorFlow 튜토리얼에서 : 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합니다..

그러나 그것은 지금까지 문제가되지 않습니다.