Вот пример. Все это localforage
package export is instance of private LocalForage
класс. Соответствующий ввод имеет интерфейс с тем же именем, но он также не экспортируется.Импорт частного интерфейса в машинописный текст
Несмотря на то, что интерфейс LocalForage
не экспортирован, TypeScript и IDE (WebStorm), похоже, позволяют импортировать его из '@ types/localforage'. Но тип не применяется.
Этот код не имеет никаких проблем пылеобразования и никаких импортных ошибок до customForage.setDriver(...)
линии:
import * as localForage from 'localforage';
import { LocalForage } from '@types/localforage';
var customForage: LocalForage = localForage;
customForage.setDriver('custom');
но приводит к ошибке:
Unresolved function or method setDriver()
В то время как этот код
import * as localForage from 'localforage';
/// <reference path="../../../node_modules/@types/localforage/index.d.ts"/>
var customForage: LocalForage = localForage;
customForage.setDriver('custom');
успешно идентифицирует setDriver
метод.
Я был счастлив, когда @types
, наконец, прибыл, и это громоздко поддерживать относительные пути для index.d.ts
.
Можно ли обрабатывать этот случай без <reference path="../../... />
в файлах, которые используют интерфейс?
Вопрос не ограничивается конкретным пакетом localforage
, но это хороший пример проблемы.
И если вы просто удалите второй импорт и '///
Paleo
нет необходимости импортировать '@ type' непосредственно в код, он разрешен по имени; и файлы из '" node_modules/@ types/* "' всегда включаются в область компиляции по умолчанию, даже если node_modules исключены в tsconfig.json. Но функция '@ types' поддерживается только с 2016 года.3, поэтому вам нужно обязательно использовать самую последнюю версию WebStorm – lena
@lena Спасибо. Действительно, 2016.3 не имеет этой проблемы и автоматически использует '@ type'. Я предполагаю, что обновление решает проблему, и это нормальное поведение для TS 2.x. – estus