我已经安装了 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.tssrc 里面。

如果我添加
/// <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/

10-15 19:57