如何处理文字类型的危险?

时间:2017-03-30 12:15:04

标签: typescript typescript2.0

我将一个大型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样式而不是=符号时。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

当您导出常量对象或类的实例时,您的第一种方法和第二种方法都不好。

您应该使用enummore info)。

export enum WinConstants {
  NO_WIN = 0,
  WIN = 1,
  BIG_WIN = 2,
  MEGA_WIN = 3
}