定义类似单例的容器对象......并保持 tslint 快乐

Defining singleton-like container objects... and keeping tslint happy

我有一个大型 TypeScript 项目,最近添加了 tslint 以强制执行一些基本的代码样式规则。这在很大程度上是无痛的,但有一件事我仍在质疑。

我有一些代码,其中有一个类似单例的对象,它包装了一些属性和函数。想象一下:

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

export const MainMenu {
    open,
    close,
    isOpen
};

但问题是 tslint 抱怨 MainMenu 的命名,因为我已经告诉它强制使用 camelCase 变量名。在除此之外的所有情况下,惯例都适用,在这种情况下,我认为大写是正确的(MathReflect 等都遵循此惯例)。

那我应该怎么办呢?无论何时发生这种情况,我都可以禁用该规则,或者 namespace 概念可能更适合这种情况?但是我正在使用外部模块,所以我不知道我是否应该这样做。另外,namespace-s 使添加 属性 成员变得更加困难。

欢迎任何建议。

总的来说,这似乎更像是我要使用的区域 namespace(或者可能是一个单独的外部模块?然后在您当前的模块中您可以重新导出它。)

但是假设您确实想以这种方式做事,并且想让 TSLint 开心。您最简单的解决方案是暂时禁用 variable-name:

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

(请注意,您可以将重新启用的评论向上移动几行 - 我只是出于审美目的更喜欢它。)

您的 tslint.json 文件中还有一个当前功能请求 for a way to exclude specific variables from this rule。所以在这条路上可能是一个选择!