3

Since TypeScript 0.9, you can set the exported value of an module directly using export =:

// client.ts 
class Client { 
    constructor(public name: string, public description: string) { } 
} 
export = Client; 

Is there a way to reference Client using a /// <reference ... />?

The following does not expose the Client class:

/// <reference path="./client.ts" />

class SomeClass {
    addClient(client: Client) { // Could not find symbol 'Client'
        ...
    }
}

I guess this is the expected behavior since I'm exporting a direct reference to the Client class, so the module is basically anonymous. But in the above class I'm not actually instantiating a new Client, so adding import Client = require('Client'); would let the AMD loader load client.js even though it would not be needed if addClient is never called.

So I was hoping for something like:

/// <reference path="./client.ts" export="Client" />

Where export would be the name to assign the module to.

4

1 に答える 1

1

/// <reference ... /ファイルレベルでエクスポートされたものがある場合は機能しません(external modulestypescriptドキュメントで呼び出されます)

コードを次のように変更します。

// client.ts 
class Client { 
    constructor(public name: string, public description: string) { } 
} 
// Remove this line export = Client; 

詳細説明:ファイルのルート レベルで何かをエクスポートした後にファイル内のアイテムにアクセスする唯一の方法は、import/のrequire組み合わせを使用することです。

PS: 内部/外部 typescript モジュールに関するビデオを作成しました: http://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1

于 2013-09-01T11:04:24.083 に答える