Я пытаюсь обновить свою машинописную зависимость (2.5.x> 3.1.3) в моем проекте React-Redux.К сожалению, не без проблем: P
У меня есть базовый компонент selectpicker React, который ожидает свойство функции с параметром типа IdNameObject:
onToggleItem: (item: IdNameObject) => void;
Фактическая функция, которая вставляется в функцию prop, - это функция отправки Redux с параметром интерфейса, который расширяет IdNameObject:
updateSelectedLocation: (location: Location) => void;
interface Location extends IdNameObject {...}
Typescript теперь выдает ошибку, говорящую, что тип Location не равен типу IdNameObject, очевидно.
Я попытался преобразовать свойство функции, чтобы сделать его универсальным:
onToggleItem: <T extends IdNameObject>(item: T) => void
Это, однако, все еще выдает ошибку машинописного текста:
type '(location: Location) => void' is not assignable to type '<T extends IdNameObject>(item: T) => void'
Есть идеи, что я должен делать в этом случае?
Полный пример кейса
Я исключил весь дополнительный код, который на самом деле не нужен для этого случая.
С одной стороны у меня естьnavigation.tsx:
interface Location extends IdNameObject {...}
interface Props {
updateSelectedLocation: (location: Location) => void;
}
class Navigation extends React.Component<Props> {
public render(): any {
const {updateSelectedLocation} = this.props;
return <Selectpicker onToggleItem={updateSelectedLocation}/>;
}
}
function mapDispatchToProps(dispatch: DispatchType) {
return {
updateSelectedLocation: (location: Location) => {
dispatch(updateSelectedLocation(location));
},
}
}
export default connect<StateProps, DispatchProps, OwnProps>(mapStateToProps, mapDispatchToProps)((Navigation as any));
С другой стороны у меня есть интерфейс selectpicker.tsx:
Расположение расширяет IdNameObject {...}
interface Props {
onToggleItem: (item: IdNameObject) => void;
}
export class Selectpicker extends React.Component<Props> {
public render(): any {
const {onToggleItem} = this.props;
return <Dropdown contentOnToggleItem={onToggleItem}/>;
}
}