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
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
180
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
4
260
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
2.4k
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
190
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
170
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6k
Basic Architectures
denyspoltorak
0
660
CSC307 Lecture 04
javiergs
PRO
0
660
高速開発のためのコード整理術
sutetotanuki
1
390
AI & Enginnering
codelynx
0
110
CSC307 Lecture 05
javiergs
PRO
0
500
Featured
See All Featured
Information Architects: The Missing Link in Design Systems
soysaucechin
0
770
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
440
Designing for humans not robots
tammielis
254
26k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
110
The Curse of the Amulet
leimatthew05
1
8.3k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
64
Testing 201, or: Great Expectations
jmmastey
46
8k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
140
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
580
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
Typedesign – Prime Four
hannesfritz
42
2.9k
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Ͱɺܕͷײ֮Λ͑Δͷ͓͢͢Ίʂ