我将一个大型JS项目翻译成TS项目并注意到了一些事情。例如,我有一个模块,如下所示:
WinConstants.ts
export = {
"no_win":0,
"win":1,
"big_win":2,
"mega_win":3
}
我想让它保持不变,所以我这样限制它:
WinConstants.ts
class WinConstants{
readonly no_win:0;
readonly win:1;
readonly big_win:2;
readonly mega_win:3;
}
export = new WinConstants();
非常酷吧?完成它,现在去翻译下一个模块。对?没那么快。我忘了将":"
替换为"="
,而TypeScript 并未向我发出警告。现在所有值均为undefined
。直到我在运行时看到它,它可能会被忽视......欢迎回到JS的不确定性!将事物转换为TS的全部意义,当你依赖于编译器的错误时,只是取消了它自己......如果没有文字类型,那就永远不会发生,因为在这种情况下,字面数字不会是类型。 / p>
那该怎么办?不要误会我的意思,我喜欢文字类型,他们帮助很多,但语法现在反对我。这些事情可能不仅在我翻译时被忽视,而且当我写一些东西并且意外地将:
置于JSON样式而不是=
符号时。
有什么想法吗?
答案 0 :(得分:1)
当您导出常量对象或类的实例时,您的第一种方法和第二种方法都不好。
您应该使用enum
(more info)。
export enum WinConstants {
NO_WIN = 0,
WIN = 1,
BIG_WIN = 2,
MEGA_WIN = 3
}