2016-03-24 7 views
1

"Optional Module Loading and Other Advanced Loading Scenarios"に記載されているのと同様のことをしたいのですが、動作しません。私はこのようなmodule1.tsをコンパイルし、今Typeによってのみ参照されるTypeScriptモジュールは、まだランタイム依存関係です

export class Module2 { 
    public someMethod(s:string):boolean{ return true; } /* ... */ 
} 

module1.ts

// declare function require(moduleNames: string[], onLoad: (...args: any[]) => void): void; 
/// <reference path="./require.d.ts"/> 

import { Module2 as M2 } from "./module2"; 

var needsLazyLoading:boolean = false; 

if (needsLazyLoading) { 
    require(["./module2"], (Module2: typeof M2) => { 
     let module2 = new Module2(); 
     if (module2.someMethod("...")) { /* ... */ } 
    }); 
} 

module2.ts

は、これら2つのファイルを考えてみましょう

tsc --module amd --outFile moduleFull1.js module1.ts 

私が上に引用した記事によると、moduleFull1.jsにはModule2への参照はありません("Use case: Lazy loading"でも同じです)。

しかし、それは

moduleFull1.js ...あります:(遅延ロードの目的に反し)

define("module2", ["require", "exports"], function (require, exports) { 
    "use strict"; 
    var Module2 = (function() { 
     function Module2() { 
     } 
     return Module2; 
    }()); 
    exports.Module2 = Module2; 
}); 
define("module1", ["require", "exports"], function (require, exports) { 
    "use strict"; 
}); 

これはなぜですか?何か不足していますか?

助けてください。

答えて

1

「宣言スペース」にはないプロパティがあると思われるようです。多くの宣言スペースがあります(詳細については、TypeScript言語仕様1.8 Section 2.3 Declarationsを参照してください)。識別子が適切に解決されるようにします。

あなたが引用したリンクを見てみましょう。

Lazy Loadingのリンクでは、明示的なrequire('foo')の構文を扱っており、表示される場所は要件とそれに続く負荷が発生したときに影響することに注意してください。

オプションのモジュール読み込みのリンクでは、次のように述べています。

モジュール識別子がしかタイプ注釈 の一部として使用され、決して発現ようにされている場合は、何も必要とするコールがその モジュールに放出されません。

あなたのコードは明らかにModule2を型名として使用していないので、必要になります。

+0

私のコードを修正し、 "Module2を型名として使用する"ことができますか? –

+0

ハンドブックに記載されている例をmimmicに変更した場合、問題は残ります。Module2は最終ファイルに存在します。 –

関連する問題