javascript - 流 : Cannot get . .. 因为对象文字中缺少属性 ...

标签 javascript flowtype

我有以下代码,它应该使用 JavaScript 的 in 运算符优化 example 变量的类型:

type Example = 'foo' | 'bar' | 'baz';

const objectWithSomeExampleKeys = {
  foo: 'foo',
  baz: 'baz'
};

function heresTheProblem(example: Example): void {
  if (example in objectWithSomeExampleKeys) {
    objectWithSomeExampleKeys[example];
  }
}

但是,我收到以下错误:

    10:     objectWithSomeExampleKeys[example];
                                      ^ Cannot get `objectWithSomeExampleKeys[example]` because property `bar` is missing in object literal [1].
        References:
        3: const objectWithSomeExampleKeys = {
                                             ^ [1]

如何让 Flow 识别 example 不能是 bar 或任何其他不在 objectWithSomeExampleKeys 中的属性?

最佳答案

我找到了解决这个问题的办法:

如果我使用 {[example: Example]: string} 从我的示例代码中显式键入 objectWithSomeExampleKeys,错误就会消失:

type Example = 'foo' | 'bar' | 'baz';

// Explicit type added to objectWithSomeExampleKeys:
const objectWithSomeExampleKeys: {[example: Example]: string} = {
  foo: 'foo',
  baz: 'baz'
};

function heresTheProblem(example: Example): void {
  if (example in objectWithSomeExampleKeys) {
    objectWithSomeExampleKeys[example];
  }
}

https://flow.org/try/#0C4TwDgpgBAogHgQwLZgDbQLxQOQDMD2+2UAPjgEYIBOxZ2lAXtgNwBQrAxvgHYDOwUfOQBWEDsADqAS2AALAMr4kEeMjQQA0hBC8AXFADeAbQiIU6favMQAuvv5Up3AOYBfKFgOsoUAvn14hNgANN5QjAGM2KyubKy4AK7c4lI8ULIQVBC8ACoZAApUQuhIABSmahawZuoAlPoAbvhSACaGYVK4UOU16FBOgiJikjIKSiq9mtq8te0+PkKi4tJyispW6lo6JpM2bD6uMUA

关于javascript - 流 : Cannot get . .. 因为对象文字中缺少属性 ...,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54354854/

相关文章:

javascript - 一致的设备ID

javascript - Flowtype:接口(interface)不能与联合类型结合

intellij-idea - JetBrains/IntelliJ IDEA 中的流程

reactjs - 如何在 FlowType 中使用 React$Element?

javascript - Flow 无法理解对 null 或未定义的检查

javascript - 如何通过流判断一个物体是否具有某些属性?

javascript - 按数字顺序对 "advanced"数字字符串进行排序

javascript - Meteor 和 underscoreJS - 整数的随机数组及其不连贯的总和

javascript - 在菜单上滑动 Logo 和文本单击

javascript - 页面中 AngularJS 的不同版本