困っていること
React × TypeScriptでHooksを使っています。
例えば、以下のようにログインが完了ユーザーとそうでないユーザーで型が以下のように分かれる時、
ts
1interface LoginUser { 2 isLogin: true, 3 id: string, 4} 5 6interface AnonymousUser { 7 isLogin: false, 8}
id
が変更されたら...という形でuseCallback
やuseEffect
を使いたいのですが、
TypeScriptに怒られてしまいます。
ts
1const [userState, setUserState] = 2 React.useState<LoginUser | AnonymousUser>(USER_INITIAL_STATE) 3 4const hoge = React.useCallback( () => { 5 foo() 6},[ 7 userState.isLogin, 8 userState.id //ここで怒られる 9])
怒られる内容
プロパティ 'id' は型 'AnonymousUser' に存在しません。 ts(2339)
型設計が良くないでしょうか?
もしくはuseCallback
やuseEffect
を使わずに実装するしかないでしょうか?
エラーが表示され続けているので良い方法で解消したいです。
知識やアイデアがあれば教えていただきたいです。
追記
型を一つにまとめるというアイデアを頂きました。
ts
1interface User { 2 isLogin: true, 3 id?: string, 4} 5
この方法にすると、
TypeScript
1if ( 2 userState.id 3 && userState.hoge 4 && userState.foo 5 && userState.bar 6) { 7 // userStateを使った何かしらのアクション 8}
のような条件分岐が大量に発生してしまうのですが、TypeScriptとはそういうものでしょうか。
型を分ければ、if (userState.isLogin)
の1行で済むのでそのようにしたかったのですが諦めた方が良さそうでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/09 03:41
2021/09/09 03:49
2021/09/09 04:23