2017-10-28 11 views
0

を持つものとして、現在のモジュールを宣言します、特定のインターフェイスを持つべきモジュールと、それぞれ、私はそれでフォルダを持つプロジェクトを持っている特定のインターフェイス

project/ 
    modules/ 
    A/index.ts 
    B/index.ts 
    C/index.ts 

index.tsファイルの各に従う必要があります特定のインタフェース。このような 何か:

export const foo = ... 
export const bar = ... 

どのように私は、各index.tsファイルには、特定のインターフェイスをエクスポートする必要があることを宣言することができますか? つまり、これらのindex.tsファイルのそれぞれについて、module.exportsが特定のインターフェイスに従わなければならないことをTypeScriptに伝える必要があります。

は私がGitHubの上で活字体/ DefinitelyTypedで、このための問題を提起:一般的にhttps://github.com/Microsoft/TypeScript/issues/19554

+0

おそらくモジュールまたは名前空間を使用する必要がありますか?これまで避けていたのでしょうか... –

+0

*牢獄を築いてください。* – naomik

+0

はい、どうもありがとうございます:) –

答えて

1

を、モジュールが実装しなければならない指定タイプはまだサポートされていませんが、あなたはGitHubの中で示唆したように、あなたは、このような規則を使用することができますリンク元の問題です。

実際にはエクスポートフォームでは機能しますが、タイプの存在に関係なく無効なエクスポート構文(export {} as MyInterface)を使用しています。これは、我々は有効な構文ですが、型アサーションではなく、実装要件として働き

export = {id: 1} as MyInterface; 

としてより簡潔にそれを書くことだと思うかもしれません

export interface MyInterface { 
    id: number; 
    name:string 
} 

const m: MyInterface = { 
    id: 1 
} 

export = m; 

だろう書き込みに

一つの方法、そのように

export = {} as MyInterface; 

型チェックも同様です。これにより、第1の形態が好ましいものとなる。

+0

ありがとう、私はあなたが示唆した何かを試してみましょう、それは今のところ十分だろうと思います...最後にあなたは 'export = {}をMyInterfaceと言います;私はそれを避けることができれば 'module.exports'を上書きしないようにしています。 –

+0

私は 'export Default {}をMyInterfaceとして使うのが望ましいでしょうか?すべてをデフォルトにアタッチします。またはデフォルトのような他のプロパティ。 –

+0

はい、私は 'default'を強く好んでいますが、モジュールオブジェクト自体を_type_したいのですが、' default'はそれをインポートするための構文的な砂糖を持つ名前付きエクスポートなので、最も近いものです。デフォルトで動作します。しかし、型のアサーションであり、型の注釈ではないため、 '型 'は機能しません。これにより、例えば不足しているプロパティが可能になる。 –

関連する問題