前提・実現したいこと
reducerの型エラー解消
ここに質問の内容を詳しく書いてください。
React + TypeScriptでreducerを実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
switch文のcaseのreturnでエラーが発生しています。
型 'StateType | { title: string; body: string; id: number | StateType; }' を型 'StateType' に割り当てることはできません。 型 '{ title: string; body: string; id: number | StateType; }' を型 'StateType' に割り当てることはできません。 プロパティ 'id' の型に互換性がありません。 型 'number | StateType' を型 'number' に割り当てることはできません。 型 'StateType' を型 'number' に割り当てることはできません。
型 'number | StateType' を型 'number' に割り当てることはできません。 型 'StateType' を型 'number' に割り当てることはできません。
該当のソースコード
typescript
1type StateType = { id: number; title: string; body: string }; 2type ActionType = { 3 type: "CREATE_EVENT" | "DELETE_EVENT" | "DELETE_ALL_EVENT"; 4 title: string; 5 body: string; 6}; 7 8const events = (state: StateType[] = [], action: ActionType): StateType[] => { 9 switch (action.type) { 10 case "CREATE_EVENT": 11 const event = { title: action.title, body: action.body }; 12 const length = state.length; 13 const id = length === 0 ? 1 : state[length - 1].id + 1; 14 return [...state, { id, ...event }]; 15 16 default: 17 return state; 18 } 19}; 20 21export default events;
試したこと
const id = length === 0 ? 1 : state[length - 1];
の型推論がconst id: StateType | 1
となっており、この部分が原因だと推測しました。
StateType
の型定義を以下に変更したところエラーは消えました。
typescript
1type StateType = { id: number | StateType; title: string; body: string };
この解決方法に違和感を感じており、もっと良いエラー解消の記述方法があればご教示いただきたいです。
よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
React: ver17.0.2
Typescript: ver4.1.2
回答1件
あなたの回答
tips
プレビュー