gpt4 book ai didi

angular - 将枚举与方法合并

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:11 25 4
gpt4 key购买 nike

我发现将枚举与 namespace 合并的做法非常有用。示例:

enum Status : {
OK = 1,
NOT_OK = 2,
}

namespace Status {

function Color(status : Status) {

if(status == Status.OK)
return 'green';
else
return 'red';

}

}

但我发现 tslint 不喜欢它们...我可以使用哪些其他方法来获得相同的行为?我想过用静态方法替换类中的命名空间,但它有两个缺点:

1) 该类必须使用不同的名称(例如“StatusUtil”)- 好的,我可以接受...

2) 在使用 Angular 时不能直接从 HTML 文件调用“StatusUtil”类(与命名空间不同)——这意味着我必须在每个组件中编写额外的方法,如下所示:

getColor(status : Status) {
return StatusUtil(status);
}

我想到的另一个选择是使用 Angular 依赖注入(inject)而不是静态方法。您认为最佳做法是什么?

最佳答案

我认为这是抑制 tslint 警告的好案例。 Tslint 可以指出您的代码可能存在的问题,但您可以使用注释在代码中抑制这些问题。

规则是为了防止在代码组织中使用命名空间,但 Typescript 仍然存在只能使用命名空间实现的合并场景。

直接来自 weswigham(ts 团队成员)在 comment :

Is namespace merging with class, function and enum a 'good' use of namespaces?

有时 - 由于我们无法识别某些类型的静态属性的临时附件,这可能是有保证的 - 在许多情况下,函数或静态类上的临时属性就足够了(除非你需要它包含类型)。虽然质疑您是否真的需要开始合并同样有效 - 例如,如果您想要关联一个组件及其参数类型,那么从同一个模块中导出它们是否足够?为什么还要将它们包装在命名空间中?那里没有意义。

归结为:

如果您正在考虑使用 namespace 来组织代码:不要。模块承担了这个 Angular 色。如果您需要只有 namespace 才能提供的功能:可以,但请检查在没有 namespace 的情况下(例如,使用类静态或函数属性,或重新导出的模块)表达概念的表现力是否相同。在同一个项目中混合命名空间和模块也是一种糟糕的风格 - 它只是感觉不对,因为传统意义上命名空间的主要特征之一是跨文件范围合并,这不会发生在模块之间(因为,作为我说了,模块本身其实就是一个命名空间)。

同样在该线​​程中,命名空间不会从语言中删除,因此可以将它们用于特定场景。

关于angular - 将枚举与方法合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56422845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com