I have a typed, nested stack navigator and am trying to reset the navigation from a screen to another which is on the parent. TypeScript is refusing to accept it as a valid name to reset, only screens in the child are available. However, for navigate, all screens are available as expected.
For example, this is ok:
navigation.navigate("Welcome");and
navigation.navigate("MainStack");But while this is ok:
navigation.reset({ index: 0, routes: [{ name: "Welcome" }], });The following gives the TypeScript error Type '"MainStack"' is not assignable to type 'keyof IntroductionStackParamList'.ts
navigation.reset({ index: 0, routes: [{ name: "MainStack" }], });Type definition:
type PreloadingScreenNavigationProp = CompositeScreenProps< NativeStackScreenProps<IntroductionStackParamList, "Preloading">, NativeStackScreenProps<AppStackParamList>>;Can anyone shed a clue on what I am doing wrong please?
Full navigation structure:
const AppStack = createNativeStackNavigator<AppStackParamList>();const IntroductionStack = createNativeStackNavigator<IntroductionStackParamList>();const OnboardingStack = createNativeStackNavigator<OnboardingStackParamList>();const LogsStack = createNativeStackNavigator<LogsStackParamList>();const Tab = createBottomTabNavigator<TabParamList>();export type AppStackParamList = { IntroductionStack: NavigatorScreenParams<IntroductionStackParamList>; OnboardingStack: NavigatorScreenParams<OnboardingStackParamList>; MainStack: NavigatorScreenParams<TabParamList>;};export type IntroductionStackParamList = { Preloading: undefined; Welcome: undefined;};export type OnboardingStackParamList = { GettingStarted: undefined; Name: undefined; Address: undefined; Licence: undefined; OnboardingComplete: undefined; OnboardingSkipped: undefined;};export type LogsStackParamList = { FlightLogs: undefined; AddFlight: undefined;};export type TabParamList = { Logbook: undefined; FlyingSummary: undefined; Profile: undefined;};const AppStackNavigator = () => { return (<NavigationContainer><AppStack.Navigator screenOptions={{ headerShown: false }}><AppStack.Screen name="IntroductionStack" component={IntroductionStackNavigator} /><AppStack.Screen name="OnboardingStack" component={OnboardingStackNavigator} /><AppStack.Screen name="MainStack" component={BottomTabNavigator} /></AppStack.Navigator></NavigationContainer> );};const IntroductionStackNavigator = () => { return (<IntroductionStack.Navigator screenOptions={{ headerShown: false }}><IntroductionStack.Screen name="Preloading" component={Preloading} /><IntroductionStack.Screen name="Welcome" component={Welcome} /></IntroductionStack.Navigator> );};const OnboardingStackNavigator = () => { return (<OnboardingStack.Navigator screenOptions={{ headerShown: false }}><OnboardingStack.Screen name="GettingStarted" component={GettingStarted} /><OnboardingStack.Screen name="Name" component={EnterName} /><OnboardingStack.Screen name="Address" component={EnterAddress} /><OnboardingStack.Screen name="Licence" component={SelectLicence} /><OnboardingStack.Screen name="OnboardingComplete" component={OnboardingComplete} /><OnboardingStack.Screen name="OnboardingSkipped" component={OnboardingSkipped} /></OnboardingStack.Navigator> );};const LogsStackNavigator = () => { return (<LogsStack.Navigator screenOptions={{ headerShown: false }}><LogsStack.Screen name="FlightLogs" component={LogScreen} /><LogsStack.Screen name="AddFlight" component={AddLogScreen} /></LogsStack.Navigator> );};const BottomTabNavigator = () => { return (<Tab.Navigator screenOptions={{ headerShown: true, tabBarItemStyle: { marginBottom: 5 }, }}><Tab.Screen name="Logbook" component={LogsStackNavigator} options={{ tabBarIcon: () => <Icon size={20} source="view-list-outline" />, }} /><Tab.Screen name="FlyingSummary" component={FlyingSummaryScreen} options={{ tabBarIcon: () => (<Icon size={20} source="calculator-variant-outline" /> ), }} /><Tab.Screen name="Profile" component={PersonalInfoScreen} options={{ tabBarIcon: () => <Icon size={20} source="account-circle-outline" />, }} /></Tab.Navigator> );};export default AppStackNavigator;






