2016-09-23 13 views
1

私たちはプライベートNPM環境に公開するTypeScriptライブラリを持っており、そのライブラリを他のTS、ES6またはES5プロジェクトで使用したいと考えています。TypeScriptデフォルト定数のエクスポート

その主なファイルは、次の操作を行うバレルとして働き、ライブラリはfooという名前NPMパッケージとしよう:

// Index.ts 
import Foo from './Core/Foo'; 

export {default as Foo} from './Core/Foo'; 

const foo = new Foo(); 

export default foo; 

私たちは、アプリが使用するために、メインのライブラリクラスと同様に、デフォルトのインスタンスをエクスポートします必要な場合を除き、新しいものを作成することはありません。

はまた、我々はDefinitelyTypedと同様の方法で、別のリポジトリにタイプ定義ファイルを作成した:それは私は何を目指してることにあるerror TS1063: An export assignment cannot be used in a namespace.

で失敗したため

// foo.d.ts 
declare namespace Foo { 
    export class Foo { 
    public constructor() 
    // ...methods 
    } 

    const foo: Foo; 

    export default foo; 
} 

declare module 'foo' { 
    export = Foo; 
} 

は、テストを実行します

// ES5, browser env 
window.Foo.foo.someMethod(); 

// ES6/TS 
import foo from 'foo'; 

foo.someMethod(); 

これを行う正しい方法がある場合は、任意のアイデアはありますか?ダニエル・rosenwasserが提案@としてだけでモジュールを宣言

EDIT

は前に働いていたが、我々は最初の拡張、新しいモジュールを作成しようとした問題がありました。例えば

// bar.d.ts 
/// <reference path="../foo/foo.d.ts"/> 

import { 
    Foo 
} from 'foo'; 

declare module 'bar' { 
    export class Bar extends Foo { 
    public constructor(); 
    // more methods 
    } 
} 

とそのテスト:

// bar-tests.ts 
/// <reference path="../foo/foo.d.ts"/> 
/// <reference path="./bar.d.ts"/> 

import foo, { 
    Foo 
} from 'foo'; 

import { 
    Bar 
} from 'bar'; 

namespace TestBar { 
    { 
    let result: Foo; 
    result = foo; 
    } 

    { 
    let result: Foo; 
    result = new Bar(); 
    } 
} 

エラーこの時間は、次のとおりです。

bar/bar-tests.ts: error TS2307: Cannot find module 'bar'. 
bar/bar.d.ts: error TS2664: Invalid module name in augmentation, module 'bar' cannot be found. 

答えて

3

ここでエラーメッセージが間違っているので、私は開きましたあなたの問題:https://github.com/Microsoft/TypeScript/issues/11092

あなたはES-スタイルのモジュールを持っている場合、あなたは周囲のモジュール宣言で直接それを定義する必要があります

declare module "foo" { 
    export class Foo { 
     public constructor() 
     // ...methods 
    } 

    const foo: Foo; 

    export default foo; 
} 
+0

をはい、これは私が前に持っていたものはかなりあるが、私は作成しようとしたときに問題が後から来ましたこのモジュールを拡張した新しいモジュールは、サンプルを質問に追加します。 – RecuencoJones

+2

別のモジュールで 'declare module" foo "{}"構文が* module augmentation *を作成します。他のモジュールにある*理由*には、トップレベルのインポートがあるということです。 import *を 'declare module' "bar" 'に移動して正しく動作させることができます。 –

+0

これはうまくいった!私は、import宣言がモジュール宣言の中に入るべきであることを認識していませんでした、Danielに感謝します! – RecuencoJones

関連する問題