Когда использовать классы против модулей в TypeScript?

Я нахожусь в процессе переноса большой кодовой базы в Typescript, но хотел получить хорошее представление о том, когда и где я должен использовать определенные вещи.

Прямо сейчас у меня есть несколько больших пространств имен в модулях:

(function (nameSpace) {

    var privateVariables = '';

    function privateFunctions () { }        

    // Public methods
    nameSpace.someMethodHere = function () { };

}(window.nameSpace = window.nameSpace || {}));

Мой вопрос в TypeScript, есть ли какая-то разница/преимущество во мне, просто превращая их в просто классы? Или это должен быть один большой Модуль с классами (каждым методом) внутри?

module nameSpace {

    export class someMethodHere {
       // etc
    }

    // more classes (my methods) here ??
}

-ИЛИ ЖЕ-

class nameSpace {

    someMethodHere () {
        // code
    }
    // more prototyped methods here
}   

Или я должен настроить их так же, как сейчас? Я пытался, и он просто продолжал давать мне ошибки, не уверен, как я делаю nameSpace.someMethodHere внутри модуля без класса!

Ответ 1

Это зависит. Модуль должен быть дискретным набором "вещей", а не просто смешанной коллекцией разрозненных классов, поэтому, если все кажется, что они принадлежат друг другу, используйте модуль для их группировки.

Я считаю, что команда TypeScript ждет, чтобы увидеть, как люди используют этот язык до публикации руководства, но я думаю, что люди опубликуют модуль, в котором они в настоящее время публикуют script, поэтому jQuery будет модулем, каждый jQuery Плагин будет модулем, основой для тестирования будет модуль, а структура AOP будет модулем - например.

Ответ 2

  • Рассмотрите возможность использования модуля в качестве хорошего варианта для Singleton (один статический объект доступен везде), где обычное использование для библиотек.
  • Рассмотрите возможность использования класса, когда вам нужно создать несколько экземпляров этого класса или если вы планируете продлить этот класс.

В основном модули хороши для упаковки всего вашего кода в один удобный глобальный объект, а класс - умный, чтобы структурировать ваш код и представление данных.