私たちはプライベート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.
をはい、これは私が前に持っていたものはかなりあるが、私は作成しようとしたときに問題が後から来ましたこのモジュールを拡張した新しいモジュールは、サンプルを質問に追加します。 – RecuencoJones
別のモジュールで 'declare module" foo "{}"構文が* module augmentation *を作成します。他のモジュールにある*理由*には、トップレベルのインポートがあるということです。 import *を 'declare module' "bar" 'に移動して正しく動作させることができます。 –
これはうまくいった!私は、import宣言がモジュール宣言の中に入るべきであることを認識していませんでした、Danielに感謝します! – RecuencoJones