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
TypeScriptのextends
Search
MisakiSoeda
April 23, 2025
Programming
0
47
TypeScriptのextends
MisakiSoeda
April 23, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
160
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
210
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
650
[AtCoder Conference 2025] LLMを使った業務AHCの上⼿な解き⽅
terryu16
6
1k
チームをチームにするEM
hitode909
0
440
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
340
2年のAppleウォレットパス開発の振り返り
muno92
PRO
0
180
CSC307 Lecture 01
javiergs
PRO
0
660
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
3
760
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
210
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
0
1.6k
SQL Server 2025 LT
odashinsuke
0
120
Featured
See All Featured
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
330
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
Context Engineering - Making Every Token Count
addyosmani
9
590
Fireside Chat
paigeccino
41
3.8k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
92
So, you think you're a good person
axbom
PRO
0
1.9k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
KATA
mclloyd
PRO
33
15k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
0
51
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
Transcript
!.JTBLJ4PFEB 5ZQF4DSJQUͷFYUFOET .JUBUT
.JTBLJ4PFEB ൃදऀ גࣜձࣾ#PPL-JWF ٕज़։ൃຊ෦γεςϜ։ൃ෦ετΞ։ൃνʔϜ ϑϩϯτΤϯυΤϯδχΞ 5ZQF4DSJQUͰझຯͰόοΫΤϯυॻ͍ͨΓ͍ͯ͠Δ 5ZQF4DSJQU͕͖ʂ ͷ54,BJHJ͔ΒελοϑΛ͍ͯ͠Δ
ͳͥ͜ͷςʔϚʹͨ͠ͷ͔
ʮܕ҆શͬͯɺͲ͏ਂ۷Γ͢ΔΜͩΖ͏ʁʯ w UZQFDIBMMFOHFTʹઓΛ࢝ΊΔʂ w UZQFDIBMMFOHFTΛ௨ͯ͠ؾ͍ͮͨͷ͕ɺܕϨϕϧͰͷߜΓࠐΈૢ࡞͕ܕ҆ શੑΛܶతʹߴΊͯ͘ΕΔͱ͍͏͜ͱɻ w ಛʹFYUFOETΛͬͨܕૢ࡞͕ҹతͰͨ͠ɻ
FYUFOETͷجຊ
FYUFOETͷجຊ w ܕҾ w Ϋϥεͷܧঝ
FYUFOETͷجຊ w ܕҾɹˡͪ͜Βͷ͓ w Ϋϥεͷܧঝ
FYUFOETͷجຊ T extends U ? X : Y w FYUFOETʮܕ͕݅Λຬ͍ͨͯ͠Δ͔ʁʯΛஅ͢Δ݅ܕͷΩʔߏจɻ
w ଞͷUZQFPGJO͕࣮ߦ࣌ͷʹج͍ͮͯܕΛߜΓࠐΉͷʹର͠ɺ FYUFOETΛͬͨ݅ܕ ʮܕͦͷͷ͚ͩΛݟͯॲཧΛ͚Δʯ७ਮͳܕϨϕϧͷذͰ͢ɻ
ྫ6OJPOܕͷϑΟϧλϦϯά త6OJPO͔Βಛఆͷܕ͚ͩநग़ type OnlyStrings<T> = T extends string ? T
: never; type Mixed = "hello" | 42 | "world"; type JustStrings = OnlyStrings<Mixed>; // "hello" | "world" 6OJPOܕʹରͯ͠5FYUFOETʜͱॻ͘ͱɺ֤ߏཁૉʹରͯ͠ݸผʹධՁ͞ ΕΔlzͱ͍͏༷͕͋Γ·͢ɻ
ྫΦϒδΣΫτͷܕΛಛఆ͢Δ తಛఆͷϓϩύςΟΛ࣋ͭܕ͚ͩΛநग़ type Event = | { type: "click"; x:
number } | { type: "scroll"; y: number }; type ExtractByType<T, K extends string> = T extends { type: K } ? T : never; type ClickEvent = ExtractByType<Event, "click">; // => { type: "click"; x: number }
ྫFYUFOETͷ͍ํʢ੍ˍ݅ܕʣ // ੍ͱͯ͠ͷextends function logLength<T extends { length: number }>(value:
T) { console.log(value.length); } // ݅ܕͱͯ͠ͷextends type OnlyStrings<T> = T extends string ? T : never;
݅ܕͰͷFYUFOETͷϝϦοτ w ܕͷ҆શੑ্͕ʢ༧ظ͠ͳ͍ܕΛ͚Δʣ w ॊೈͳܕૢ࡞͕Ͱ͖ΔʢܕϨϕϧͰ fi MUFSNBQ͕Մೳʣ w ܕਪ͕ਖ਼֬ʹͳΔʢิ͕ޮ͖͘͢ͳΔʣ
·ͱΊ
·ͱΊ w ܕϨϕϧͷૢ࡞ܕ҆શੑͷ伴ʂ w ݅ܕʹΑΔFYUFOETɺܕͷذɾબʹڧྗɻ w UZQFDIBMMFOHFTͰɺܕͷײ֮Λ͑Δͷ͓͢͢Ίʂ