Определение одноэлементных контейнерных объектов и поддержка tslint

У меня есть большой проект TypeScript, и я недавно добавил tslint, чтобы обеспечить соблюдение некоторых основных правил стиля кода. В основном это было безболезненно, но есть одна вещь, которую я все еще сомневаюсь.

У меня есть несколько фрагментов кода, где у меня есть объект, похожий на синглтон, который обертывает некоторые свойства и функции. Представьте что-то вроде:

function open(x) {...};
function close(x) {...};
let isOpen = false;

export const MainMenu {
    open,
    close,
    isOpen
};

Но проблема в том, что tslint жалуется на имя MainMenu, потому что я сказал ему применять имена переменных в стиле camelCase. Во всех обстоятельствах, кроме этого, соглашение остается верным, и в подобных ситуациях я думаю, что правильно писать в верхнем регистре (Math, Reflect и т. д. все следуют этому соглашению).

Так что мне здесь делать? Я мог бы либо отключить правило всякий раз, когда это происходит, либо, возможно, для этого больше подходит концепция namespace? Но тогда я использую внешние модули, так что не знаю, стоит ли. Кроме того, namespace усложняет добавление элементов свойства.

Приветствуются любые советы.


person Barguast    schedule 21.02.2016    source источник
comment
В фрагменте кода нет калькулятора.   -  person RJM    schedule 22.02.2016
comment
Извините, я изменил свой пример, так как MainMenu имело немного больше смысла в этом контексте! Обновлено   -  person Barguast    schedule 22.02.2016


Ответы (1)


В общем, это больше похоже на область, где я бы использовал namespace (или, возможно, отдельный внешний модуль? Тогда в вашем текущем модуле вы могли бы реэкспортировать его.)

Но предположим, что вы хотите делать что-то таким образом и хотите сделать TSLint счастливым. Самое простое решение — просто временно отключить variable-name:

/* tslint:disable:variable-name */
export const MainMenu {
    open,
    close,
    isOpen
};
/* tslint:enable:variable-name */

(Обратите внимание, что вы можете переместить повторно включающий комментарий на несколько строк выше — я просто предпочитаю, чтобы он был там, где он есть, из эстетических соображений.)

Также есть текущий запрос функции для исключения определенных переменных из этого правила в вашем tslint.json файл. Так что в будущем это может быть вариантом!

person JKillian    schedule 21.02.2016
comment
Спасибо. Я просмотрел несколько репозиториев GitHub, чтобы узнать, как другие справляются с этим, и многие (включая Microsoft в VSCode), похоже, используют namespace, поэтому я думаю, что пойду по этому пути. - person Barguast; 22.02.2016