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
