你好,我还在学习Typescript,我正在尝试摆脱所有的任何类型。无论我做什么,我总是得到这个错误。我的应用程序工作正常,但我知道使用任何不好,所以我试图清理它一点。如果你能给我指出正确的方向,这将是有帮助的。或解释我做错了什么。谢谢
Argument of type 'Dispatch<SetStateAction<[] | undefined>>' is not assignable to parameter of type 'Dispatch<string[]>'.
Type 'string[]' is not assignable to type 'SetStateAction<[] | undefined>'.
Type 'string[]' is not assignable to type '[]'.
Target allows only 0 element(s) but source may have more.
App.tsx
const [userData, setUserData] = useState<any>();
fetchData('user', setUserData);
return
<Profile content={userData} />
Firebase.tsx
export const fetchData = async (storage: string, setData: React.Dispatch<string[]>) => {
const q = query(collection(db, storage));
const unsubscribe = onSnapshot(q, (querySnapshot) => {
let array: string[] = [];
querySnapshot.forEach((doc: any) => {
array.push({ ...doc.data(), id: doc.id });
});
setData(array);
});
return () => unsubscribe();
};
Profile.tsx
type Props = {
content?: {
firstName: string;
lastName: string;
}[];
location?: string;
image?: string;
};
const Profile: React.FC<Props> = ({ content, image }) => {}
2条答案
按热度按时间bcs8qyzn1#
问题似乎出在fetchData函数中的setData参数类型。您当前将其定义为
React.Dispatch<string[]>
,但它应该是React.Dispatch<SetStateAction<string[]>>
。因此可以按如下方式指定类型:
React.Dispatch<SetStateAction<string[]>>
然后,在fetchData函数的主体中,您可以像通常使用setState一样使用setData,并且类型将被正确插入。如果你只是想抄我写的所有:
然后,在App组件中,可以将userData状态变量的类型指定为string[]。
并且可以更新Profile组件中的内容 prop 的类型以匹配userData状态变量的类型。
cbjzeqam2#
对于您的错误,只需将
React.Dispatch<string[]>
更改为Dispatch<SetStateAction<[] | undefined>>
由于状态不是直接定义的,所以Typescript必须知道它可能是未定义的。