2017-07-31 95 views
1

我正在使用Moment.js處理我的TypeScript項目中的日期時間對象。我想定義一個對象類型,該對象類型的鍵值爲Moment如何將外部類型導入到全局.d.ts文件中

但是,當我將以下內容添加到全局定義文件(test.d.ts)時,該文件中的任何接口都不在該項目的任何位置。

import { Moment } from 'moment'; 

interface Test { 
    date: Moment; 
} 

當我嘗試使用該接口在.ts.tsx文件我得到這個打字稿錯誤:

[at-loader] ./src/<examplefilename>.tsx:91:26 
    TS2304: Cannot find name 'Test'. 

無論VSCode的打字稿錯誤檢查,也不TSLint顯示的代碼的任何問題。

如何從外部模塊導入用於全局定義文件的類型?

+0

我會檢查tsconfig文件。在編譯器選項 - typeroot你應該有@types路徑和類型的路徑 – kimy82

+0

@ kimy82,我不認爲這個問題在那裏。我可以在整個項目中導入時間,但我無法將其導入到項目的'.d.ts'定義文件中,以在我的項目中使用'Moment'類型定義全局類型。只要我不嘗試導入外部類型,我的'.d.ts'文件的其餘部分都可以在沒有配置的情況下找到。 – keawade

+0

你的'tsconfig.json'項目中是否包含全局'd.ts'文件? –

回答

2

當文件具有頂級importexport語句時,它被視爲模塊。您感興趣的所有內容(類型,接口等)需要在該文件中顯式導出並導入需要這些類型的文件中。

// types.d.ts 
import { Thingy } from 'sick-lib'; 

export declare interface IInterface { 
    foo: any; 
    bar: any; 
    baz: Thingy; 
} 

// main.ts 
import { IInterface } from 'types'; 

const xyz: IInterface = { 
    foo: true, 
    bar: false 
}; 
+0

解決了這個問題,謝謝! 現在不得不手動導出所有接口,這有點令人沮喪,因爲我只導入了一件東​​西。 – keawade