每当我在文本内传递OnPressItem中的项目id时,(item?.id)显示未定义不能分配给类型'number '时,我就会遇到问题。还有什么方法可以声明id是号码?
export interface MeetingListProps {
data?: Meetings
style?: StyleProp<ViewStyle>
onPressItem: (id: number) => void //here define the onPressItem
const { onPressItem } = props
}
const { data, loading, error } = useGetMeetingsQuery
return (
<View style={styles.container}>
{data?.meetings &&
data.meetings.map((item) => {
return (
<View>
<Text style={styles.item} onPress={() => onPressItem(item?.id)}>{item?.title}</Text>
</View>
)
})}
</View>
当您使用可选链接(?.
语法)的结果值可以是您的值(item.id)或未定义,如果项目是空或未定义。所以item?.id
的类型是number | undefined
。简单的解决方案是,如果你的数组里面没有空值,删除可选的链接操作符,或者在调用函数onPressItem
onPress={() => item ? onPressItem(item.id) : {}}
你还应该能够通过为item提供一个类型来告诉Typescript如果item存在就期望得到一个数字。
export interface MeetingListProps {
onPressItem: (id: number) => void; //here define the onPressItem
}
type IItem = {
id: number;
title: string;
};
type IQuery = () => {
data: { meetings: IItem[] };
loading: boolean;
error: {};
};
const useGetMeetingsQuery: IQuery = () => {
return { data: { meetings: [] }, loading: true, error: {} };
};
export default function Item(props: MeetingListProps) {
const { onPressItem } = props;
const { data, loading, error } = useGetMeetingsQuery();
return (
<div>
{data?.meetings &&
data.meetings.map((item) => {
return (
<div>
<p onClick={() => onPressItem(item?.id)}>{item?.title}</p>
</div>
);
})}
</div>
);
}
游乐场