打字稿:如何为对象属性增加类型安全?

时间:2019-01-21 19:03:07

标签: typescript interface type-safety

我有以下内容:

type CommandTypes = 'one' | 'two' | 'three';
const CONST = {
  commands: {
    a: 'one',
    b: 'two',
    c: 'error'
  },
};

是否有一种方法可以强制所有命令都属于特定类型?

现在TypeScript告诉我 a b c 类型为 string ,但是我想将这些属性强制为 CommandTypes 类型,以便开发人员无法指定任意字符串。我希望TypeScript能够捕获 c 无效的错误,因为它不属于允许的CommandType。

如果我用这种方式分解CONST定义:

type CommandTypes = 'one' | 'two' | 'three';
const commands : CommandTypes = {
  a: 'one',
  b: 'two',
  c: 'error'
}

const CONST = {
  commands,
};

这实际上确实捕获了 c 错误,但是现在我也失去了Visual Studio代码中的自动完成功能。如果我键入 CONST.commands。。我现在在这里没有任何自动完成功能,就像我将定义保留在帖子顶部所示的那样,那么我确实获得了自动完成功能。

1 个答案:

答案 0 :(得分:1)

Record<CommandTypes, string>将为您提供一个对象,其键是CommandType的分布式联合,其值必须为字符串。注意:如果您想为每个键使用不同的类型,则只能在右侧使用一种类型,而必须阅读有关映射类型的打字稿文档