typescript 类型'RegExpExecArray| null”必须具有返回迭代器的“[Symbol.iterator]()”方法

2nbm6dog  于 2023-05-30  发布在  TypeScript
关注(0)|答案(3)|浏览(212)

我是TypeScript的新手。了解基本知识,但遇到了一个类型转换错误,我还没有找到解决方案。

const [full, id]: string | null = /.*media\/[^\/]+\/(.*)/.exec(item.uri)

typescript抛出错误:[完整,ID]

Type 'RegExpExecArray | null' is not assignable to type 'string | null'.
Type 'RegExpExecArray' is not assignable to type 'string'.ts(2322)
Type 'string | null' must have a '[Symbol.iterator]()' method that returns an iterator.

typecast Any ofc works but wanna do this properly,but haven't found what exactly TS wants me to do,while trying to search for an answer...现在就来这里吧,希望能得到指引。
谢谢!

y0u0uwnf

y0u0uwnf1#

使用TypeScript建议的类型:

const a: RegExpExecArray | null = /.*media\/[^\/]+\/(.*)/.exec(item.uri)

console.log(a)
ws51t4hk

ws51t4hk2#

好了,找到了解决问题的方法:

const id: RegExpExecArray | null = /.*media\/[^\/]+\/(.*)/.exec(item.uri)
return id?.[1]?.replace(/:/g, '_')

这段代码正确地类型转换,但也做检查“对象是可能的'空'”TS错误消息。
感谢大家的投入。学到了很多。

afdcj2ne

afdcj2ne3#

下面是另一个类型安全的,非常简单的解决方案:
const [full, id] = /.*media\/[^\/]+\/(.*)/.exec(item.uri) || []
然后你可以:

if(id){
   ...
  }

相关问题