具有数组解构器的“ Array.prototype.find()”的类型

时间:2019-03-27 18:24:19

标签: javascript typescript

我试图破坏数组,但是出现以下错误:

  

类型“ undefined”必须具有返回迭代器的“ 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)使它正常工作?

1 个答案:

答案 0 :(得分: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];