你可以看看React.useState()返回什么类型。
function useState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>];
如您所见,setter 的类型为 Dispatch<SetStateAction<S>>
如果你往下走,你会看到
type Dispatch<A> = (value: A) => void;
所以你的 setter 必须是一个函数类型,它接收一个参数并返回 void。
现在让我们看看SetStateAction<A>
type SetStateAction<S> = S | ((prevState: S) => S);
它要么是一个简单的值,要么是一个接收前一个状态并返回一个新状态的函数。
那么如何修复你的类型呢?
const Recipe = (props: {
recipe: Irecipe;
shoppingList: string[];
setShoppingList: Dispatch<SetStateAction<string[]>>;
}) => {...}
或者,如果您不打算使用prevState 功能,您可以简化类型:
const Recipe = (props: {
recipe: Irecipe;
shoppingList: string[];
setShoppingList: (value: string[]) => void;
}) => {...}