2017-04-15 15 views
0

ライブラリの型定義ファイルを作成しようとしています。ライブラリは長い時間前にクライアントに出荷されるので、コードを変更することはできません。ファクトリ関数をエクスポートするライブラリの型スクリプト定義の作成

私は、ライブラリパッケージは、(デフォルトのエクスポートを使用して)、単一のファクトリ関数をエクスポート活字体2 *

を使用しています。ユーザーは、そのファクトリ関数を使用してlibのインスタンスを作成できます。 何私が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のLibのタイプ(そのため、 ) 定義されていません。

あり、私はそれを動作させることができる2つの方法がありますが、私はこれらが適切な解決策であるかわからない:

1)のLib

import * as Lib from 'lib'; 

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

2)一部としてインポートデフォルトからすべてをインポート名前、その他の名前をlibから指定した名前でインポートします

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とき デフォルトをスロー Factory.default(configObject) があなたの 'factory.js'、ない' factory.d.ts'は、デフォルトを持っている必要があります –

+0

関数ではないようにしかし、これは、JSに結果輸出する。私が提供したのは、文字通り 'import {factory as default as Factory、Lib as Lib} 'を' lib'から書き直すより短いです; 'この行がうまくいけば、私の答えもうまくいきます。 –

関連する問題