Тип аннотации для функции, которая не предоставляет универсальный тип
Я использую react-native-navigation
с @types/react-native-navigation
, Это работает так, что все ваши зарегистрированные компоненты React Native автоматически получают this.props.navigator
,
navigator
имеет push
метод, но он не допускает аргументов любого типа. У него есть свойство, которое называется passProps
которые позволяют передавать свойства на страницу, к которой вы переходите, но нет способа аннотировать типы пропускаемых вами объектов, которые должны соответствовать опорам экрана, к которому вы переходите. Например:
export interface BioProps { username: string }
export class BioScreen extends React.Component<BioProps> {}
this.props.navigator.push({
screen: 'bio.BioScreen',
title: 'foo',
passProps: {
username,
}
});
В этом случае я хочу passProps
быть того же типа, что и BioProps
для безопасности типа. Однако ничего подобного .push<BioProps>
это позволило бы вам сделать это.
Есть ли способ обеспечить безопасность типов, если она не включена в определения?
1 ответ
Вы можете увеличить Navigator
интерфейс из модуля, чтобы добавить общую перегрузку, которая будет обеспечивать props
быть определенного типа:
// react-native-navigation-augmented.ts
import { Navigation, NavigationComponentProps } from 'react-native-navigation';
declare module 'react-native-navigation'{
export interface Navigator {
push<T>(params: PushedScreen & { passProps: T }): void
}
}
// Otherfile.ts
/// <reference path="./react-native-navigation-augmented.ts" />
this.props.navigator.push<BioProps>({
screen: 'bio.BioScreen',
title: 'Pushed Screen',
// Will cause an error if username is not present or of a different type
passProps: {
username: ""
}
});