我已经安装了 three@^0.103.0
,它有自己的类型定义。
在我的项目的 src/global.d.ts
中,我有:
import * as _THREE from 'three'
declare global {
const THREE: typeof _THREE
}
然后在
src/global.ts
我有import * as THREE from 'three'
(window as any).THREE = { ...THREE }
然后在
src/my-code.js
我试图使用 THREE
作为全局变量,f.e.console.log(new THREE.Vector3(1,2,3)) // ERROR, 'THREE' refers to a UMD global, but the current file is a module. Consider adding an import instead.
它告诉我
'THREE' refers to a UMD global, but the current file is a module. Consider adding an import instead.
。当我跳转到
THREE
的定义时,它会将我带到 node_modules/three/src/Three.d.ts
,它不是我的 src/global.d.ts
文件。那么,TypeScript 似乎忽略了我的
global.d.ts
定义?我的
tsconfig.json
包含 "allowJs" true,
"checkJs" true,
"include": ["src/**/*"]
我有
global.d.ts
在 src
里面。如果我添加
/// <reference path="./global.d.ts" />
到
src/my-code.js
文件 (JavaScript) 的顶部,然后它就可以工作了,我可以跳转到 THREE
的定义,它将我带到我的 global.d.ts
文件。为什么没有
reference
注释它不起作用? 最佳答案
对于three.js,您可以使用编译器选项跳过这个本地全局变量小鸡到小鸡:
"compilerOptions": {
"allowUmdGlobalAccess": true,
这将使 typescript 访问您的项目全局 UMD,安装时将列出three.js。然后你可以在你的项目中使用它,例如 JQuery。
如果此选项不可用 - 更新您的 typescript 。
Some details
关于javascript - 如何覆盖 TypeScript UMD 全局类型定义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56104065/