amd - Referensmodul exporterad med “export=” i TypeScript


Sedan TypeScript 0.9 kan du ange det exporterade värdet av ett modul direkt med export =:

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

Finns det ett sätt att referera till Client med /// <reference ... />?

Följande exponerar inte Client-klassen:

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

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

Jag antar att detta är det förväntade beteendet eftersom jag exporterar en direkt referens till Client-klassen, så modulen är i princip anonym. Men i klassen ovan instansierar jag faktiskt inte en ny Client, så att lägga till import Client=require('Client'); skulle låta AMD-laddaren ladda client.js även om det inte skulle behövas om addClient aldrig anropas.

Så jag hoppades på något liknande:

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

Där export skulle vara namnet att tilldela modulen.

Svar #1

/// <reference ... / fungerar inte när du har något exporterat på filnivå (kallat externa moduler i Typescript-dokumentationen)

Ändra din kod till att vara :

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

Ytterligare förklaring: Det enda sättet att komma åt objekt i en fil efter att du har exporterat något på filens rot-nivå är via import/require-kombinationen.

PS: Jag gjorde en video om interna/externa TypeScript-moduler: http://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1