Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
React19で変化したuseReducerの型から学ぶTypeScriptの型推論
Search
k8o
May 24, 2025
1
590
React19で変化したuseReducerの型から学ぶTypeScriptの型推論
k8o
May 24, 2025
Tweet
Share
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
A Modern Web Designer's Workflow
chriscoyier
695
190k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.5k
Why Our Code Smells
bkeepers
PRO
337
57k
Visualization
eitanlees
146
16k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
A designer walks into a library…
pauljervisheath
207
24k
Transcript
React19で変化した useReducerの型から学ぶ TypeScriptの型推論
自己紹介 k8o(koki sakano) 株式会社ドワンゴ/教育事業本部/Webフロントセクション このスライドは副業として開発に参加しているIrusiruを利用して作成しました! TypeScriptとReactを業務と趣味の両方で愛用している https://github.com/k35o https://qiita.com/KokiSakano https://zenn.dev/kokisakano https://k8o.me
@k35o53k
引数 ・状態の更新方法を指定するreducer関数 ・初期値を決める関数・値 useReducerとは? 🛠useReducerは状態を管理するReactの機能の⼀種 返り値 ・状態 ・状態を更新するための関数 状態を特定の方法でのみ更新させるときに使う 右の例では状態を年齢の増減以外で更新できない
配列のreduce関数 useReducerと配列のreduce関数 配列に実装されるreduce関数 ・多くの値を一つにまとめるもの ・コールバック関数は これまでの結果と現在の要素を次の結果にする関数 実際にuseReducerは配列のreduce関数にちなんで名付けられている useReducer ・継続的に生じるアクションを一つの状態にまとめる ・reducer関数は
これまでのStateとアクションを次のStateにする関数
React18とReact19の型の変化 React 18 React 19 細かすぎてよくわからないが、明らかにコード量が減った! @types/reactの19.0.4時点のコードを抽出したものです。namespaceは気にしないで下さい。
React18のuseReducer 😅React18のuseReducerで困るところ インラインでreducer関数を定義したとき 引数の状態に型を付与しないと、型エラーが発生する🤯
React18のuseReducer 🔍React18のuseReducerの型 reducer関数を主軸に、そこから各箇所の型を推論している! reducer関数 Reducer<S, A> 状態 ReducerState<R> その他
React19のuseReducer React18で困ったところ、React19ではどうだろう🤔 インラインでreducer関数を定義したとき 引数の状態に型を付与しなくても、状態の型を推論してくれる🎉
React19のuseReducer 🔍React19のuseReducerの特徴 reducer関数からだけではなく、初期値からも状態の型を推論している! reducer関数 (S, A) => A 状態 S
その他 アクション A
React18からReact19の推論の変化 React18とReact19では状態の推論方法が変更された React 18: reducer関数からのみ状態を推論 React 19: reducer関数と初期値から状態を推論 状態の型を初期値からも推論させたい インラインで状態の型を定義しないreducer関数で型安全な宣言が可能に‼
React18とReact19のuseReducerで学ぶ型推論 React18式:主体となる型があり、それから従属する型を推論させる方法 React19式:値の主従関係を決めずに基本的な型から型を推論させる方法 汎用性はReact19式の方が高いが、React18式が活きる場面もある React 18式 React 19式 主体となる型から型を生成する 基本型から必要な型を生成する
主役の型 基本型A 基本型B その他1 その他2 その他3 基本型A 基本型B その他1 その他2 その他3
React18式の型推論が有効なパターン React 18式 主役の型があり、それを元に型推論させる 例: 関数の部分適用を行う関数 部分適用: f(x, y, z)
=>g(3)(y, z) ・主役は適用元の関数f ・適用先の値xは関数fを元に決定 上記の関数が持つ性質と同じように 値xの型も関数fの型によって定まるようになった!
まとめ ・React19のバージョンアップに合わせてuseReducerの型の大工事が行われた ・React18ではreducer関数に型情報がないと状態の型を推論できない ・React19ではreducer関数に型情報がなくても初期値から推論できる ・React18のような型定義は主体となる型とそれに従属する型があるときに有効 ・React19のような型定義はそれ以外のパターンで汎用的に利用できる ・普段利用するライブラリで定義された型から学ぶことは多い 身近で複雑な機能の型を実装して、実際の型を確認して遊ぶとためになる