React-navigation v5 TypeScript: как требовать параметры? - PullRequest
0 голосов
/ 20 апреля 2020

Я создал файл интерфейсов:

import { CompositeNavigationProp } from '@react-navigation/native'
import { MaterialBottomTabNavigationProp } from '@react-navigation/material-bottom-tabs'
import { StackNavigationProp } from '@react-navigation/stack'

export type ITabOneParams = {}
export type ITabTwoParams = {}
export type IStackOneParams = {
  headerTitle: string
  itemId: string
}

export type IHomeTabsParams = {
  TabOne: ITabOneParams
  TabTwo: ITabTwoParams
}

export type IHomeStackParams = {
  HomeTabs: IHomeTabsParams
  StackOne: IStackOneParams
}

export {
  MaterialBottomTabNavigationProp,
  StackNavigationProp,
  CompositeNavigationProp
}

Вот компонент, использующий эти интерфейсы:

import React, { PureComponent } from 'react'
import { StyleSheet, Text, View } from 'react-native'
import { Button } from 'react-native-paper'
import {
  CompositeNavigationProp,
  MaterialBottomTabNavigationProp,
  StackNavigationProp,
  IHomeStackParams,
  IHomeTabsParams
} from '../../interfaces/router'

export default class TabOne extends PureComponent<OwnProps> {
  render () {
    return (
      <View>
        <Text>TabOne</Text>
        <Button
          onPress={() => this.props.navigation.navigate('StackOne')}
        >
          Go to StackOne
        </Button>
      </View>
    )
  }
}

type TabOneScreenNavigationProp = CompositeNavigationProp<
  MaterialBottomTabNavigationProp<IHomeTabsParams, 'TabOne'>,
  StackNavigationProp<IHomeStackParams>
>

export interface OwnProps {
  navigation: TabOneScreenNavigationProp
}

Я ожидаю, что this.props.navigation.navigate('StackOne') выдаст ошибку типа, потому что согласно В моем определении типа требуются параметры headerTitle и itemId. Этого не происходит, машинопись считает этот метод правильным. Как я могу заставить машинопись выдавать ошибку в таких случаях?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...