有时人们会告诉你不应该在TypeScript中使用命名空间。例如:https://typescript-eslint.io/rules/no-namespace/(eslint错误:“ES 2015模块语法优于命名空间”)
当然我知道ES模块是什么,当然我的TS代码基本上是在ES模块中构造的。
然而在某些情况下(UI组件、复杂事件等)我使用名称空间绑定类型(仅类型!),以便于以后导入和使用这些类型。请参见以下示例(这是某种UI组件)。重要的是,稍后通过使用import { Button } from 'xyz'
,您可以访问函数Button
本身以及所有类型Button.Type
,Button.Variant
和Button.Size
,我认为它们非常方便。
export { Button };
namespace Button {
export type Type = 'button' | 'submit' | 'reset';
export type Variant = 'default' | 'primary' | 'warning' | 'danger';
export type Size = 'small' | 'medium' | 'large';
}
function Button(props: {
type?: Button.Type;
variant?: Button.Variant;
size?: Button.Size;
// ... and others ...
}) {
// not important
}
[Edit:请将此示例视为小部件库的一部分,而不是应用程序]
您认为这是反模式吗?请解释您的答案。
1条答案
按热度按时间n6lpvg4x1#
正如您所说,
Namespace
被认为是过时的。最好避免它。相反,请执行以下操作:button.ts
app.ts
至于为什么它已经过时或不受欢迎,首先,它可能会导致冲突和无意中覆盖两个名称空间,上面的模式让您在导入它时处于驾驶员的位置。