下面是一個例子。所有localforage
包出口是私人LocalForage
類的一個實例。相應的鍵入具有相同名稱的界面,但也未導出。在Typescript中導入私人界面
儘管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/*「'中的文件默認會包含在編譯範圍內,即使在tsconfig.json中排除了node_modules。但'@ types'功能只支持自2016.3以來,因此您需要確保使用最新的WebStorm版本 – lena
@lena謝謝。的確,2016.3沒有這個問題,並且自動使用'@type'。我猜升級解決了這個問題,這對TS 2.x來說是正常的行爲。 – estus