定义类似单例的容器对象......并保持 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 变量名。在除此之外的所有情况下,惯例都适用,在这种情况下,我认为大写是正确的(Math
、Reflect
等都遵循此惯例)。
那我应该怎么办呢?无论何时发生这种情况,我都可以禁用该规则,或者 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。所以在这条路上可能是一个选择!
我有一个大型 TypeScript 项目,最近添加了 tslint 以强制执行一些基本的代码样式规则。这在很大程度上是无痛的,但有一件事我仍在质疑。
我有一些代码,其中有一个类似单例的对象,它包装了一些属性和函数。想象一下:
function open(x) {...};
function close(x) {...};
let isOpen = false;
export const MainMenu {
open,
close,
isOpen
};
但问题是 tslint 抱怨 MainMenu 的命名,因为我已经告诉它强制使用 camelCase 变量名。在除此之外的所有情况下,惯例都适用,在这种情况下,我认为大写是正确的(Math
、Reflect
等都遵循此惯例)。
那我应该怎么办呢?无论何时发生这种情况,我都可以禁用该规则,或者 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。所以在这条路上可能是一个选择!