如何解决React Typescript-类型必须具有返回迭代器的'[Symbol.iterator]'方法
https://stackblitz.com/edit/react-ts-shopping-cart-ssofgc?file=Shop.tsx
抱歉,这不是最好的问题,但
我的演示是一个使用React和Typescript的简单购物车。
我在stackblitz中的演示可以正常工作,但是在我的应用程序中使用相同的代码却出错。
在我的应用中,removeFromCart出现错误
const removeFromCart = (
e: React.MouseEvent<HTMLInputElement,MouseEvent>,item: IProduct
) => {
let cartcopy = [...cart]; // Error here - Type 'IProduct' must have a '[Symbol.iterator]()' method that returns an iterator.
cartcopy = cartcopy.filter(cartItem => cartItem.id !== item.id);
setCart(cartcopy);
};
错误是
Type 'IProduct' must have a '[Symbol.iterator]()' method that returns an iterator.
解决方法
奇怪的是,您得到的错误是您所说的,因为您未在该行上使用item
...我认为您的cart
类型需要为“数组喜欢”,即。将[Symbol.iterator]()
包括在内。您可以阅读有关Symbol.iterator on MDN的更多信息。
编辑:我现在(在您的stackblitz链接中)看到cart
来自const [cart,setCart] = useState([]);
,所以它肯定是一个数组,所以这不应该成为问题。在我看来,您的编辑器或本地项目配置有问题...
也许您可以尝试更明确地说明变量类型。例如,items
和cart
都似乎是IProduct[]
,因此您可以将其写为:
const [cart,setCart] = useState<IProduct[]>([]);
const items: IProduct[] = [
{
id: 1,name: "Product One",price: 12
},{
id: 2,name: "Product Two",price: 45
},{
id: 3,name: "Product Three",price: 23
}
];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。