【问题标题】:Types for 'Array.prototype.find()' with an array deconstructor带有数组解构函数的“Array.prototype.find()”类型
【发布时间】:2019-08-18 10:21:15
【问题描述】:

我试图破坏一个数组,但我收到以下错误:

类型“未定义”必须具有返回迭代器的“Symbol.iterator”方法。

let [alias, config]: [string, DBConfig] | undefined = Object.entries(info).find(...)

这是find定义显示的,和我定义的一样。

(method) Array<[string, DBConfig]>.find(predicate: (
  value: [string, DBConfig], 
  index: number, 
  obj: [string, DBConfig][]) => boolean, thisArg?: any
): [string, DBConfig] | undefined (+1 overload)

如果我删除我的定义,它看起来像这样:

let [alias, config] = Object.entries(info).find(...)

然后我得到同样的错误。我该怎么做(不使用any)才能让它工作?

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

    整个问题归结为您试图对可能无法破坏的东西(例如undefined)使用解构。

    如果您确定let [alias, config] = Object.entries(info).find(...)永远在您的用例中产生undefined,那么您只需将其转换为:

    let [alias, config] = Object.entries(info).find(/*...*/) as [string | DBConfig];
    

    如果它可能导致undefined,那么您将不得不接受一个可为空的 DBConfig

    let [alias, config] = Object.entries(info).find(/*...*/) || ["", null];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-22
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多