2013-04-25 18 views
33

Sto provando a farlo, ma non funziona come mi aspetterei.Come accedere ai metodi statici in TypeScript

(sto usando l'opzione AMD)

//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 

Come si fa a fare logger.log()?

+0

che dovrebbe funzionare bene, Ho codice simile di lavoro (forse la versione di TS risolto) –

risposta

94

È possibile importare direttamente, che permette di avere l'uso che si desidera.

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

E la definizione rimane la stessa.

// path/logger.ts 
export class Logger { 

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

questa dovrebbe essere la risposta accettata :) –

13

Questa risposta è stata corretta al momento della pubblicazione. Ora è deprecato. Vedi sotto la risposta di Dimitris per una migliore soluzione attuale.

Utilizzando una classe, non è possibile. Sei sempre andando ad avere per chiamare {module}.{class}.{function}

Ma è possibile eliminare la classe del tutto e basta chiamare {module}.{function}:

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

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

Le modifiche al modo interno moduli contribuiscono al sistema tipo non sono pertinenti qui. –

+0

Non ero chiaro se fossero solo i moduli interni che stavano cambiando. Grazie - aggiornerò. – JcFx

+0

Lo uso sempre per i moduli che sono in effetti singleton. – thomaux

Problemi correlati