Ссылочный путь не захватывает интерфейс с помощью импорта - IntelliJ - PullRequest
0 голосов
/ 31 января 2019

Структура файла

frontend
  | static
    | ts
      | react
        |components
          AnotherFile.d.ts
          Index.d.ts

Контекст

Когда я реализую AnotherFile.d.ts и Index.d.ts следующим образом. IntelliJ не выдает никаких ошибок в отношении этих двух файлов:

Index.d.ts

interface myFuncType {
  (n: number): void;
}

AnotherFile.d.ts

/// <reference path='./Index.d.ts'/>
interface AnotherType {
  f: myFuncType
}

Теперь, если Index.d.ts импортирует и использует класс следующим образом, IntelliJ red-подчеркивает 'myFuncType' в AnotherFile.d.ts с ошибкой, TS2304: Cannot find name 'myFuncType'.

Index.d.ts

import {MyClass} from "static/ts/MyClass";

interface myFuncType {
  (n: MyClass) : void;
}

AnotherFile.d.ts

/// <reference path='./Index.d.ts'/>
interface AnotherType {
  f: myFuncType;
}

Примечания

  1. Если заменить строку ...<reference path.../> во втором случае для AnotherFile.d.ts до import {myFuncType} from "static/ts/react/components/Index";, ошибка исчезает, но мне интересно, есть ли способ заставить это работать при использовании ...<reference path.../>.
  2. Пометка frontEnd как «Корень ресурсов», по-видимому, является разницей между разрешением использования относительных путей в import ... строках (например, import {myFuncType} from "./Index" вместо import {myFuncType} from "static/ts/react/components/Index";

Вопрос

Как заставить работать второй случай, не вводя оператор "import" в AnotherFile.d.ts .

1 Ответ

0 голосов
/ 31 января 2019

Добавив import к вашему Index.d.ts, вы сделаете его модулем .В отличие от пространств имен , модули могут потребляться только путем их явного импорта с использованием одной из форм импорта - таким образом, ошибка компилятора.

При определении вашего интерфейса (какими должны быть d.ts файлыиспользуется для), вам нужно решить, над каким приложением вы работаете.Если это модульное приложение, вам нужно использовать модули.Для глобального приложения, к которому предполагается доступ из глобальной области (например, через <script src=...> в браузере), используйте пространства имен.Смешивание обоих кодов не сработает.

Подробнее см. https://www.typescriptlang.org/docs/handbook/declaration-files/library-structures.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...