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 4.7と型レベルプログラミング
Search
uhyo
May 14, 2022
Technology
7
5.8k
TypeScript 4.7と型レベルプログラミング
2022年5月14日のTechFeed Conference 2022の発表スライドです。
uhyo
May 14, 2022
Tweet
Share
More Decks by uhyo
See All by uhyo
libsyncrpcってなに?
uhyo
0
290
Next.jsと状態管理のプラクティス
uhyo
7
5.6k
10ヶ月かけてstyled-components v4からv5にアップデートした話
uhyo
5
600
更新系と状態
uhyo
8
3.1k
React 19アップデートのために必要なこと
uhyo
8
2.4k
color-scheme: light dark; を完全に理解する
uhyo
8
660
React 19 + Jotaiを試して気づいた注意点
uhyo
9
3.4k
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
3
3.2k
tsconfig.jsonの最近の新機能 ファイルパス編
uhyo
8
4.3k
Other Decks in Technology
See All in Technology
面倒な作業はAIにおまかせ。Flutter開発をスマートに効率化
ruideengineer
0
250
関数型プログラミングで 「脳がバグる」を乗り越える
manabeai
1
190
ビズリーチが挑む メトリクスを活用した技術的負債の解消 / dev-productivity-con2025
visional_engineering_and_design
3
7.5k
CRE Camp #1 エンジニアリングを民主化するCREチームでありたい話
mntsq
1
120
PO初心者が考えた ”POらしさ”
nb_rady
0
210
Getting to Know Your Legacy (System) with AI-Driven Software Archeology (WeAreDevelopers World Congress 2025)
feststelltaste
1
130
タイミーのデータモデリング事例と今後のチャレンジ
ttccddtoki
6
2.4k
What’s new in Android development tools
yanzm
0
310
いつの間にか入れ替わってる!?新しいAWS Security Hubとは?
cmusudakeisuke
0
120
Delegating the chores of authenticating users to Keycloak
ahus1
0
140
Sansanのデータプロダクトマネジメントのアプローチ
sansantech
PRO
0
150
United airlines®️ USA Contact Numbers: Complete 2025 Support Guide
unitedflyhelp
0
310
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Statistics for Hackers
jakevdp
799
220k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
970
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Why Our Code Smells
bkeepers
PRO
336
57k
Done Done
chrislema
184
16k
Adopting Sorbet at Scale
ufuk
77
9.5k
Unsuck your backbone
ammeep
671
58k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Making Projects Easy
brettharned
116
6.3k
Transcript
2022-05-14 uhyo 5ZQF4DSJQUͱ ܕϨϕϧϓϩάϥϛϯά
About Speaker VIZP -*/&ͷϑϩϯτΤϯυΤϯδχΞ 5ZQF4DSJQUͱ3FBDU͕ઐ 5ZQF4DSJQUͷೖॻൃചதʂ
型レベルプログラミングとは? ܕͰΑΓਖ਼֬ͳϩδοΫΛهड़͠ɺ ίʔυͷ҆શੑΛߴΊΔͨΊʹ طଘͷܕ͔Β৽ͨͳܕΛग़͢Δख๏ͷ૯শ ʢVIZPͷݟղͰ͢ʣ
型レベルプログラミングに使われる主な道具 LFZPGܕ ΦϒδΣΫτܕ͔ΒจࣈྻϦςϥϧܕΛಘΒΕΔك༗ͳଘࡏ UZQFPGܕ ͷੈք͔Βܕͷੈքͷڮ͠Λͯ͘͠ΕΔ NBQQFEUZQFT ΦϒδΣΫτܕͷʹඞཁෆՄܽ
DPOEJUJPOBMUZQFT ϩδοΫͱ͍͑݅ذɻJOGFSʹΑΔܕͷύλʔϯϚονڧྗ VOJPOEJTUSJCVUJPO ϢχΦϯܕΛࣗ༝ࣗࡏʹૢ࡞Ͱ͖Δڧྗͳػߏ UFNQMBUFMJUFSBMUZQFT ܕϨϕϧจࣈྻૢ࡞Λ͍ͨ͠ͱ͖ʹ͓ੈʹͳΔ
最近業務で書いた実例 type ResolversWhereTypesAreRemoved = Pick< Required<Resolvers>, { [K in keyof
Resolvers]-?: NonNullable<Resolvers[K]> extends { __isTypeOf?: unknown } ? never : K; }[keyof Resolvers] >;
TypeScript 4.7の新機能たち ৭ʑ৽ػೳ͕͋Δ͕ɺܕϨϕϧϓϩάϥϛϯάʹཱͭػೳ Ճ͞Εͨ FYUFOET $POTUSBJOUTPO JOGFS 5ZQF7BSJBCMFT *OTUBOUJBUJPO&YQSFTTJPOT 0QUJPOBM7BSJBODF"OOPUBUJPOTGPS5ZQF1BSBNFUFST
extends Constraints on infer Type Variables // Before (〜TS 4.6)
type FirstString<T> = T extends [infer S, ...unknown[]] ? S extends string ? S : never : never; // After (TS 4.7) type FirstString<T> = T extends [infer S extends string, ...unknown[]] ? S : never; Announcing TypeScript 4.7 RC ͔ΒҾ༻
Instantiation Expressions δΣωϦΫεؔܕͷಛఆͷܕҾʹ͓͚ΔฦΓͷܕ ΛಘΔͷָ͕ʹͳͬͨ const func = <T,>(elm: T) =>
[elm]; // Before (〜TS 4.6) const _f = () => { return func<number>(0) }; type FuncRetForNumber = ReturnType<typeof _f>; // After(TS 4.7) type FuncRetForNumber = ReturnType<typeof func<number>>;
Optional Variance Annotations for Type Parameters ܕʹແཧΓมੑΛ༩͢Δͷ͕ैདྷΑΓָ͔ͭએݴత ʹͳͬͨ // 諸般の事情でTに対して共変にしたい
// Before(〜TS 4.6) const _s = Symbol(); type Obj1<T> = { [_s]?: T; } // After(TS 4.7) type Obj2<out T> = {};
まとめ օ͞Μָ͍͠ܕϨϕϧϓϩάϥϛϯάϥΠϑΛʂ