【问题标题】:How to destructure an array with elements of different types in typescript如何在打字稿中解构具有不同类型元素的数组
【发布时间】:2021-11-24 19:00:33
【问题描述】:

以下代码示例在 javascript 中运行良好:

 const f = ()=> { return[true,"text",11]; }
 const [active,status,numberEleven] = f();
 const twelve = numberEleven + 1;

但是,const twelve = numberEleven + 1; 在 typescript 中引发错误,因为 numberEleven 可以是字符串、布尔值或数字:
我试图改变函数返回类型:

const f = ()=> {
  const res: [boolean, string, number] = [true, warning, score];
  return res;
}

但它没有用。然后我尝试像这样更改解构数组的类型:

 const [active,status,numberEleven]: [boolean, string, number] = f();

但是这种方法导致了以下错误:

Type '(string | number | boolean)[]' is not assignable to type '[boolean, string, number]'.
  Target requires 3 element(s) but source may have fewer.

那么,在 typescript 中解构包含不同类型元素的数组的最佳方法是什么?
谢谢!

【问题讨论】:

  • 您的第二个选项有效 (typescriptlang.org/play?#code/…) 另一个版本是 as const: typescriptlang.org/play?#code/…
  • 请考虑查看How to Ask 的指南以及minimal reproducible example 的构成要素。当您显示代码并且某些东西不起作用时,仅仅说“但它不起作用”并没有帮助。预计您将准确描述什么不起作用...是否有错误消息?如果是这样,它是什么,它发生在哪里?是否有一些意想不到的输出?什么和在哪里?由于您说“不起作用”的版本实际上在 TS Playground 中确实有效,因此现在问题无法重现,因此除非您纠正它,否则该问题可能会被关闭。祝你好运!

标签: typescript destructuring


【解决方案1】:

这可以使用as const来实现。

const f = () => {
  return [true, "text", 11] as const;
}

const [active,status,numberEleven] = f();
const twelve = numberEleven + 1;

【讨论】:

    【解决方案2】:

    确实,第二个选项有效。我分享的错误是由另一个代码块引起的。 谢谢德拉戈米尔!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2018-11-03
      • 2020-09-16
      相关资源
      最近更新 更多