I have installed three@^0.103.0
, which has its own type definitions.
In src/global.d.ts
of my project I have:
import * as _THREE from 'three'
declare global {
const THREE: typeof _THREE
}
Then in src/global.ts
I have
import * as THREE from 'three'
(window as any).THREE = { ...THREE }
Then in src/my-code.js
I am trying to use the THREE
as a global variable, 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.
It tells me that 'THREE' refers to a UMD global, but the current file is a module. Consider adding an import instead.
.
When I jump to the definition of THREE
, it takes me to node_modules/three/src/Three.d.ts
, which is not my src/global.d.ts
file.
So, it seems like TypeScript is ignoring my global.d.ts
definitions?
My tsconfig.json
contains
"allowJs" true,
"checkJs" true,
"include": ["src/**/*"]
and I have global.d.ts
is inside of src
.
If I add
/// <reference path="./global.d.ts" />
to the top of src/my-code.js
file (JavaScript), then it works, and I can jump to the definition of THREE
which takes me to my global.d.ts
file.
Why does it not work without the reference
comment?
For three.js you could declare compiler option allowUmdGlobalAccess
in tsconfig.json
:
"compilerOptions": {
"allowUmdGlobalAccess": true,
}
This will give typescript access to your project global UMD, where three.js is listed when you install it. Then you could use it at your project same way as for example JQuery.
If this option not available - update your typescript.
Some details
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With