react native typescript 'string' は、useNavigation で 'never' 型のパラメータに割り当てることはできません。質問する

react native typescript 'string' は、useNavigation で 'never' 型のパラメータに割り当てることはできません。質問する

[React Native TypeScript で「文字列」は「never」型のパラメータに代入できないというエラーが繰り返し発生しますが、その理由がわかりません。誰かこのバグを修正するのを手伝ってくれませんか。

よろしくお願いします。

コード画像

コードスニペット :

const loadReport = (id: string) => {
    setPostId(id);
    navigation.navigate('Report', {postId: id});
}

「レポート」の下に下線が引かれます。

ベストアンサー1

これは RN > 0.65 で発生する奇妙な問題です。私の解決策は次のとおりです。

1.- 輸入:

{/* Depends of your Package (Stack or NativeStack...) */}
import { StackNavigationProp } from '@react-navigation/stack';
import { useNavigation } from '@react-navigation/core';

2.- 型を定義する

export type RootStackParamList = {
  YourScreen: { id: number } | undefined;
};

3.- StackNavigationProp タイプの useNavigation フックを割り当てます。

const navigation = useNavigation<StackNavigationProp<RootStackParamList>>();

4.- 使用してください! (目: このタイプを使用すると、ナビゲーション オブジェクトにアクセスできます)

<TouchableOpacity
   // Use this when you pass a parameter (is optional)
   onPress={() => navigation.navigate('YourScreen', {id: 5})}>
</TouchableOpacity>

5.- 次の点に注意してください:

  • undefined を指定すると、ルートにパラメータがないことを意味します。undefined のユニオン型 =>任意のタイプ | 未定義パラメータがオプションであることを意味します。

  • useNavigation const には特別な型があり、この最終的な型は 3 つのジェネリックを受け取ります。

  • パラメータリストオブジェクト =>ルートスタックパラメータリスト

  • スクリーンルートの名前 =>ルート名

  • ナビゲーターのID(オプション)=>ナビゲーターID

から得られました:https://reactnavigation.org/docs/typescript/#annotating-usenavigation

おすすめ記事