Как переопределить определение глобального типа TypeScript UMD? - PullRequest
0 голосов
/ 13 мая 2019

Я установил 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 в качестве глобальной переменной, например,

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 определения?

My 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 комментария?

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

Выше должно работать. Есть только одна маленькая ошибка:

Два global файла имеют одинаковое имя! (т.е. global.ts и global.d.ts)

В этом случае TypeScript, кажется, объединяет их (или что-то в этом роде) и, таким образом, обрабатывает global как один и тот же модуль (как в import './global', будучи неоднозначным).

Итак, переименовав один модуль в другое, все работает.

Например, переименуйте src/global.ts в src/make-global.ts и оставьте src/global.d.ts, и оно будет работать.

Я вырывал свои волосы, гадая, что происходит, пока не переименовал один из файлов.

1 голос
/ 16 июля 2019

Вы должны проверить стратегию разрешения ввода шрифтов TypeScript в справочнике .

Как указано там, .ts файлы имеют приоритет над .d.ts.

(только что столкнулисьсам в ту же проблему)

...