2017-12-14 17 views
10

Typescriptモジュールを使用してプロジェクトを作成したいと思いますが、vanilla javascriptからプロジェクトを使用することができます。JavascriptのTypescriptモジュールを使用する

それぞれ1つのクラス(AB、およびC)を含む3つのモジュールが含まれているとします。

すなわち

A.ts:

export default class A { 
    /* things */ 
} 

B.ts:

export default class B { 
    /* things */ 
} 

C.ts:

これらのすべてはに組み込まれており、同梱されている
export default class C { 
    /* things */ 
} 

1つのファイルdist.js bpack。 I図書館の利用者は、どのように私はこれをやって行くだろう

<script src="dist.js"></script> 
<script> 
    var foo = new LettersLibrary.A(); 
</script> 

を似た何かをできるようにしたいと思い、最終的な目標はtypescriptですモジュールを利用して開発することができることですが、ライブラリを提供バニラjsから使用可能です。

+0

['es6'はモジュールをネイティブに持ち込むので]タイプスクリプトのカスタムモジュールや名前空間を避けることを検討することができます(http://exploringjs.com/es6/ch_modules.html)。ちょうど準拠する必要があります。 – Hitmands

答えて

6

これにはTypeScript名前空間を使用します。クラスをクラス内で宣言し、モジュール内からクラスをエクスポートすることができます。あなたのユーザーはあなたが好きなようにそれを使用することができます。

https://www.typescriptlang.org/docs/handbook/namespaces.html

例:JavaScriptで

namespace LettersLibrary { 
    export class A { 
    hello = "Hello World"; 
    } 

    export class B { 
    myBool = false; 
    } 

    export class C { 
    someInt = 42; 
    } 
} 

、あなたはその後、どうなる:

const instance = new LettersLibrary.A(); 
console.log (instance.hello); // "Hello World" 

を使用すると、他のファイルからのクラスを輸出し直す必要がある場合は、単にインポートしたクラスをエクスポートconst とタイプ(TypeScript開発に便利です。そうでないと、モジュール):

import importA from "..."; 
import importB from "..."; 
import importC from "..."; 

namespace LettersLibrary { 
    export const A = importA; 
    export type A = importA; 

    // Same for B and C 
} 

WebPackを使用する場合は、ライブラリとしてエクスポートする必要があります。このため、とlibraryTargetのオプションと一緒にlibraryExportの設定を使用できます。参照:https://webpack.js.org/configuration/output/#output-libraryexport

@Ghabriel Nunesのおかげで、moduleの名前はnamespaceとなりました。

+0

これは、A、B、およびCが別々のファイルに保存されていることを維持できるのでしょうか?それは私が探していた答えです。 –

+0

必要なクラスをインポートして、 'export const A = A;'と 'export type A = A;'を組み合わせて、完全に機能する再エクスポートされたクラスを作りましょう。私は私の答えを更新しました。 – NikxDa

+0

エクスポートのconstでは、 '' A 'は型アノテーションを持たず、直接的または間接的に自身のイニシャライザで参照されるため、暗黙的に' 'any' '型を持ちます。 ''ブロックスコープ変数' A '' あなたの編集はこれを解決します、ありがとう^^ –

関連する問題