2013-04-25 10 views
33

Ich versuche, dies zu tun, aber es funktioniert nicht wie ich es erwarten würde.Zugriff auf statische Methoden in TypeScript

(Ich benutze die AMD-Option)

//logger.ts 
export class Logger { 

    static log(message: string) { 
     //do stuff 
    } 
} 

//main.ts 
import logger = module('services/logger'); 
logger.log("test"); //The property 'log' does not exist on value of type '"logger"' 
logger.Logger.log(); //works 

Guten Tag Logger.log()?

+0

, die gut funktionieren sollte, habe ich einen ähnlichen Code arbeiten (vielleicht die TS Versionierung es gelöst) –

Antwort

94

Sie Klassen direkt importieren können, die Ihnen die Nutzung Sie haben können.

// usage 
import { Logger } from 'path/logger.ts' 
Logger.Log(); 

Und die Definition bleibt gleich.

// path/logger.ts 
export class Logger { 

    static Log() { 
     ... 
    } 
} 
+1

sollte dies die akzeptierte Antwort sein :) –

13

Diese Antwort war zum Zeitpunkt der Buchung korrekt. Es ist jetzt veraltet. Siehe Dimitris 'Antwort unten für eine bessere aktuelle Lösung.

Mit einer Klasse können Sie nicht. Du wirst immer {module}.{class}.{function}

nennen, aber die Klasse zusammen fallen kann und {module}.{function} rufen Sie einfach an:

// services/logger.ts 
export function log(message:string){ 
// do stuff 
} 

//main.ts 
import logger = module('services/logger'); 
logger.log("test"); // Should work 
+0

Die Änderungen, wie interne Module des Typs System beitragen, sind hier nicht relevant. –

+0

Mir war nicht klar, ob es nur interne Module waren, die sich änderten. Danke - Ich werde aktualisieren. – JcFx

+0

Ich benutze dies die ganze Zeit für Module, die in der Tat Singletons sind. – thomaux