typescript 使用reduce从数组创建字典时,对象文字[1]中缺少流错误属性

4zcjmb1e  于 2023-04-22  发布在  TypeScript
关注(0)|答案(1)|浏览(117)

我尝试使用reduce从数组创建字典。然而,当使用reduce从数组创建字典时,我遇到了一个flow错误属性,该属性在object literal [1]中丢失。这对所有三个键'A',' B',和'C'都发生了。

const foo = [
    'A',
    'B',
    'C',
  ];

  const bar = foo.reduce((acc, curr) => {
 
    // the actual code will do some logic on the string value in foo
    // but for the test just create a dictionary of the key to itself as value

    acc[curr] = curr;
    return acc;
  }, {});

https://flow.org/try/#1N4Igxg9gdgZglgcxALlAJwKYEMwBcD6aArlLnALYYrgA2WAzvXGCADQgYAeOBARgJ74AJhhhYiNXClzEM7DFCLl602QF92kEdQA6UAAT7IUern0wIEfQF59AbT2HDAcgCCz1o6fOAQh68uAML+BvoAugDcel7Gpvq8WGg25pYAdJhCRGAYABQ5OGCsRkRoaACUNgB8+sCOAfoA9A36uAAWGPo8RFg0RhAi+gDucDS9Qlb0EJT6NJYA1kQADvrQKRD1TfFEZhZJbR24GHEAVkRxYJhYh536Qsxk0In8KzAt7fpzGM+4VnC49BgaK8GPoAG49IgYaKhQwFOxgEpoMLJBGlKIw-SYXAlAwFdGGDQ1NRlCJsECgjBoJjQaiggAMqQATHSACypOkgNRAA

j8ag8udp

j8ag8udp1#

这里的问题是Flow识别出初始值{}是一个空对象,所以当你试图向{}.A添加一些东西时,会抛出警告/错误。
这里有一个解决方案,给初始值一个自定义的Dictionary类型,请参阅对象作为Map:

interface Dictionary {
  [key: string]: any
}

const foo = ['A','B','C'];

let initial: Dictionary = {};
const bar = foo.reduce((acc, curr) => {
  acc[curr] = curr;
  return acc;
}, initial);

PS:这在Typescript中也是一样的

相关问题