【问题标题】:List to object with default values in Typescript在 Typescript 中列出具有默认值的对象
【发布时间】:2022-08-12 03:47:50
【问题描述】:

以下函数(没有类型声明)在 Javascript 中按预期运行,但 Typescript 为 ...keysArray 引发错误 A spread argument must either have a tuple type or be passed to a rest parameter

const arrayToMap = (keysArray: string[], defaultValue: any) => {
  const object = Object.assign(...keysArray.map((k) => ({ [k]: defaultValue })));
  return object;
};

如何解决?我已经尝试将扩展运算符放在函数参数中,但没有运气。

在 Javascript 中:

const arrayToMap = (keysArray, defaultValue) => {
  const object = Object.assign(...keysArray.map((k) => ({ [k]: defaultValue })));
  return object;
};

console.log(arrayToMap([\'a\', \'b\', \'c\'], false))

    标签: typescript


    【解决方案1】:

    问题是接受数组的重载具有签名assign(target: object, ...sources: any[]): any。您不能将any[] 传播到[object,...any[]],因为[object,...any[]] 至少需要一个元素,而any[] 可能有0 个元素。

    这可能是一种解决方案:

    const arrayToMap = (keysArray: string[], defaultValue: any) => {
      const object = Object.assign({}, ...keysArray.map((k) => ({ [k]: defaultValue })));
      return object;
    };
    
    

    Playground Link

    【讨论】:

      【解决方案2】:

      为了原始数据类型' 默认值,遵循以下语法

      const numList = new Array(5).fill(0)
      
      console.log(numList)
      console.log('Total items: ' + numList.length)

      为了对象的默认值,遵循以下语法

      const objList = new Array(5).fill(0).map(()=> ({ var1: 22, var2: 33 }))
      
      console.log(objList)
      console.log('Total items: ' + objList.length)

      【讨论】:

        猜你喜欢
        • 2022-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-09
        • 2019-04-03
        • 2023-01-27
        • 2021-07-04
        • 1970-01-01
        相关资源
        最近更新 更多