Я впервые использую машинопись в своем проекте, и у меня появляется ошибка onPress
, которая вызывает toggleModal
. Ошибка исходит от onPress
Согласно React Native docs , DatePicker Android .open () выполняет следующие действия:
Возвращает Обещание, которое будет вызывать объект, содержащий действие, год, месяц (0-11), день, если пользователь выбрал дату. Если пользователь закрыл диалоговое окно, Обещание все равно будет разрешено с действием DatePicker Android .dismissedAction, а все остальные ключи не определены.
Может кто-то уточнить, если ошибка возникает из-за следующих и как это исправить?
- Обещание DatePicker Android .open (), так как ответ может или не может быть возвращен
- Нужно ли вводить onPress как функцию с
onPress: Function
?
Ошибка
src/DatePicker.tsx:109:25 - error TS2769: No overload matches this call.
Overload 1 of 2, '(props: Readonly<TouchableOpacityProps>): TouchableOpacity', gave the following error.
Type '(props: Props) => Promise<void>' is not assignable to type '(event: GestureResponderEvent) => void'.
Types of parameters 'props' and 'event' are incompatible.
Type 'GestureResponderEvent' is missing the following properties from type 'Props': title, onPress, onValueChange, mode
Overload 2 of 2, '(props: TouchableOpacityProps, context?: any): TouchableOpacity', gave the following error.
Type '(props: Props) => Promise<void>' is not assignable to type '(event: GestureResponderEvent) => void'.
109 <TouchableOpacity onPress={toggleModal} style={styles.fieldTextContainer}>
Типы
// TypeScript: Types
interface Props {
title: string,
onPress: Function,
onValueChange: Function,
mode: 'calendar' | 'spinner' | 'default',
minDate?: Date | number;
maxDate?: Date | number;
}
interface AndroidProps {
action: 'dateSetAction' | 'dismissedAction',
newDate?: Date;
year?: number;
month?: number;
day?: number;
}
toggleModal
// Toggle Modal
const toggleModal = async (props: Props) => {
try {
// Check Platform (iOS)
if (Platform.OS === 'ios') {
// React Hook: Toggle Modal
toggle((modalVisible) => !modalVisible);
}
// Check Platform (Android)
if (Platform.OS === 'android') {
const { action, year, month, day } : AndroidProps = await DatePickerAndroid.open({
date: date,
mode: props.mode,
});
// Action: Date Set
if (
action === DatePickerAndroid.dateSetAction
&& year !== undefined
&& month !== undefined
&& day !== undefined
) {
// New Date
let newDate:Date = new Date(year, month, day);
// Select Date
selectDate(newDate);
}
// Action: Dismissed
if (action === DatePickerAndroid.dismissedAction) {
// Do Nothing
}
};
}
catch (error) {
console.log(error);
}
};
DatePicker.tsx
<TouchableOpacity onPress={toggleModal} style={styles.fieldTextContainer}>
<Text style={styles.fieldText} numberOfLines={1}>{date ? moment(date).format('MMM Do, YYYY') : 'Select'}</Text>
<Icon name="ios-arrow-forward" size={22} style={styles.arrowForward}/>
</TouchableOpacity>