2017-04-15 83 views
0

我正在嘗試爲庫創建類型定義文件。該庫很早以前就已發佈給客戶,所以我無法更改其代碼。爲導出工廠函數的庫創建TypeScript類型定義

我使用打字稿2 *

庫包導出(使用默認的導出)一個工廠函數;用戶可以使用該工廠函數創建庫的實例。 我使用lib.d.ts是

declare var _createLib: (config: Object) => Promise<Lib>; 
export default _createLib; 

export interface Lib { 
    version: string; 
} 

然後我試圖使用它在打字稿,如:

import LibFactory from 'lib'; 

LibFactory(configObject).then((actualLib: Lib => { 
    // do some magic here 
}); 

但失敗了,因爲庫類型(即actualLib的) 沒有定義。

有兩種方法,我可以讓它工作,但我不知道這些是妥善的解決辦法:

1)從庫

import * as Lib from 'lib'; 

Lib.default(configObject).then((actualLib: Lib.Lib => { 
}); 

2)導入默認一些導入所有名稱和任何其他類型的名稱導入

import {default as Factory, Lib as Lib} from 'lib'; 

Factory(configObject).then((actualLib: Lib=> { 
}); 

我錯過了什麼?在這種情況下是否有更好的方式來創建和使用類型定義?

回答

1

你是對的,在這種情況下,你應該導入這兩個部分。但是,這句法應該工作以及爲您提供:

import Factory, { Lib } from 'lib'; 

Factory(configObject).then((actualLib: Lib=> { 
}); 

而且,如果工廠有正確的定義,你可以省略指定actualLib的類型:

import Factory from 'lib'; 

Factory(configObject).then((actualLib => { 
}); 

打字稿會知道它的類型。

+0

然而transpiled當這個結果JS像 Factory.default(configObject) 會拋出 默認是不是一個函數 –

+0

你'factory.js',不'factory.d.ts',必須有默認出口。我所提供的,只是從'lib'中簡單重寫'import {default,默認爲Factory,Lib as Lib};'如果這條線有效,我的答案也會起作用。 –

相關問題