2016-12-02 5 views
0

Вот пример. Все это 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, но это хороший пример проблемы.

+0

И если вы просто удалите второй импорт и '/// Paleo

+1

нет необходимости импортировать '@ type' непосредственно в код, он разрешен по имени; и файлы из '" node_modules/@ types/* "' всегда включаются в область компиляции по умолчанию, даже если node_modules исключены в tsconfig.json. Но функция '@ types' поддерживается только с 2016 года.3, поэтому вам нужно обязательно использовать самую последнюю версию WebStorm – lena

+0

@lena Спасибо. Действительно, 2016.3 не имеет этой проблемы и автоматически использует '@ type'. Я предполагаю, что обновление решает проблему, и это нормальное поведение для TS 2.x. – estus

ответ

1

Из того, что я прочитал и от своей повседневной работы с @types вам никогда не нужно импортировать или ссылаться на @types. @types автоматически разрешаются по имени. Таким образом, для модуля localforage загружается локальный источник @types. Краткое резюме был представлен здесь: https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/

Я думаю, проблема при использовании WebStorm или phpstrom может быть, что вы не используете сборки в версии машинописи и не тот, который вы установили для вашего проекта. Попытайтесь использовать пользовательскую версию машинописного текста и загрузите ту, которую вы установили в node_modules. И убедитесь, что вы используете TypeScript 2.0

+0

Спасибо, похоже, что это правда, предыдущая версия IDE использовала TS 1.x. – estus