typescript find() 怎么写类型接口

问题

clipboard.png

如上,用 typescript 写代码,用到了 find() 方法。遇到的问题是第二行一直报类型错误,我知道 find() 方法可能会返回 Cart 类型数据,也可以返回 undefined 值。

下面两种写法都没用起作用,第二行还是会报类型错误。这种情况我的类型接口要怎么写才不会报错。

// 写法一
const cart: Cart = this.state.cartList.find((item: Cart) => item.cartId === cartId)
cart.checked = !cart.checked

// 写法二
const cart: (Cart | undefined) = this.state.cartList.find((item: Cart) => item.cartId === cartId)
cart.checked = !cart.checked
阅读 5.7k
6 个回答
const cart: any = this.state.cartList.find((item: Cart) => item.cartId === cartId)
cart.checked = !cart.checked

对于编译器来说 find一定有可能返回undefined

如果你很有信心就 const cart = cartList.find( ... )!; (然后没找到自己负责)

编辑器已经提到cart可能会是undefined ,所以

if (!cart) return;
// todo

find 返回的不是个数组吗?

最开始的代码

clipboard.png

报错信息

clipboard.png

按照你说加上判断代码

clipboard.png

clipboard.png

我想要的

我想要的就是代码别小红色波浪线,咱两在一个频道上了不。很明显按照你提供的写法,仍然有小红波浪线。

@raohong 可以看下,按照你提供的写法,仍然报错

如果 cart 一定找得到就试试这样

cart.checked = !cart!.checked;

否则就放在 if 里

if (cart) {
    ...
}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进