2016-12-02 86 views
0

下面是一個例子。所有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包,但它是一個很好的例子。

+0

如果你只是刪除第二個導入和'///參考'? – Paleo

+1

沒有必要直接在代碼中輸入'@type',它通過名稱來解析;並且''node_modules/@ types/*「'中的文件默認會包含在編譯範圍內,即使在tsconfig.json中排除了node_modules。但'@ types'功能只支持自2016.3以來,因此您需要確保使用最新的WebStorm版本 – lena

+0

@lena謝謝。的確,2016.3沒有這個問題,並且自動使用'@type'。我猜升級解決了這個問題,這對TS 2.x來說是正常的行爲。 – estus

回答

1

從我讀過的和從我的日常工作中用@types你不應該需要導入或引用@types。 @types自動按名稱解析。因此,對於localforage模塊,將加載@types localforage。 的簡短摘要在這裏提出: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