2013-04-25 7 views
33

Я пытаюсь сделать это, но он не работает, как я ожидал.Как получить доступ к статическим методам в TypeScript

(я использую вариант 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 

Как вы Logger.log()?

+0

, что должно работать нормально, у меня есть подобный код работает (возможно версионирование TS решить ее) –

ответ

94

Вы можете импортировать классы напрямую, что позволяет иметь использование вы хотите.

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

И определение остается неизменным.

// path/logger.ts 
export class Logger { 

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

это должен быть принятый ответ :) –

13

Этот ответ был правильным во время публикации. Теперь он устарел. См. Ответ Димитриса ниже для лучшего текущего решения.

Использование класса, вы не можете. Вы всегда будете иметь, чтобы позвонить {module}.{class}.{function}

Но вы можете оставить класс вообще и просто назвать {module}.{function}:

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

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

изменений в том, как внутренние модули способствуют системам типа не являются релевантными здесь. –

+0

Я не был ясен, если бы это были только внутренние модули, которые менялись. Спасибо, я обновлю. – JcFx

+0

Я использую это все время для модулей, которые на самом деле являются одноточиями. – thomaux

Смежные вопросы