如果我需要使用 const 变量,我会使用这种方法,因为它具有类型安全性。
export class LocalStorage {
static USER_INFO = "user-info";
static PROFILE_INFO = "profile-info";
}
但似乎我们可以像这样使用
string enums
:
export enum LocalStorage {
USER_INFO = "user-info";
PROFILE_INFO = "profile-info";
}
这两种方法有什么区别?
我同意@VLAZ,最好的方法肯定会有所不同。使用枚举最重要的好处可能是能够提高函数的类型安全性。
export enum LocalStorage {
USER_INFO = "user-info",
PROFILE_INFO = "profile-info"
}
function doSomething(l: LocalStorage) {
}
doSomething("foo"); // error, "foo" is not LocalStorage
doSomething("user-info"); // error, "user-info" is not LocalStorage
doSomething(LocalStorage.USER_INFO); // compiles
总的来说,枚举提供了改进的类型安全性(在它们有意义的地方),并且使用新成员扩展它们通常更简单。
enum 是常量的逻辑分组。假设您想使用不同的颜色。然后,您使颜色枚举包含定义的所有颜色值。假设 accountType 包含当前、储蓄、贷款、经常性的值。它的逻辑分组。 Constant你可以定义任何东西。
现在您必须确保您的枚举名称与逻辑分组有关吗?
在您的情况下Enum名称是LocalStorage,但下面的值不能证明是枚举
两种方法都可以完成简单场景的工作。将构造用于其预期目的始终是一个好习惯。
你的班级可能会无意中演变为不仅仅是持有
static
的东西。导致担忧的融合。例如,将来您可能认为有必要为本地存储、indexedDB 或 cookies 添加 CRUD 功能。
然后您可以选择
const enum
或 enum
。
如果您需要在运行时编译的
enum
,请使用常规 TypeScript enum
。
A
const enum
的存在只是为了帮助类型安全。它的用法被内联,并且 const enum
在编译期间被丢弃。
编辑:如果 https://www.typescriptlang.org/tsconfig/#isolatedModules 是 tsconfig 中的
true
,那么编译器将发出 const 枚举,就好像它们是常规枚举一样。简而言之,这有助于提高单文件转译器的兼容性,因为单文件转译器一次只查看一个文件,因此无法完全查看所有文件。