Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
TypeScript 4.7と型レベルプログラミング
uhyo
May 14, 2022
Technology
6
3.5k
TypeScript 4.7と型レベルプログラミング
2022年5月14日のTechFeed Conference 2022の発表スライドです。
uhyo
May 14, 2022
Tweet
Share
More Decks by uhyo
See All by uhyo
TypeScriptを振り回せ!
uhyo
26
7.3k
2020年代、使う技術はどう選ぶ?
uhyo
21
11k
TypeScriptをフォークしてEmojiScriptを作った話
uhyo
1
670
ECMAScriptの視点で見るWeakRefの“正しい”使い方
uhyo
3
420
安全性の極北から見るTypeScript
uhyo
19
10k
Other Decks in Technology
See All in Technology
數據的多重宇宙 @ LINE Taiwan
line_developers_tw
PRO
0
720
VFX Graphを使って 軽率にAudio Visualizerを作る
drumath2237
0
100
runn is a package/tool for running operations following a scenario. / golang.tokyo #32
k1low
1
230
ニフティでSRE推進活動を始めて取り組んできたこと
niftycorp
2
640
読者のことを考えて書いてみよう / Write with your reader in mind
line_developers
PRO
3
370
tfcon-2022-cpp
cpp
5
5.2k
5分で完全理解するGoのiota
uji
3
2.1k
Agile and Requirement : アジャイルな要件定義について考える
kawaguti
PRO
9
3.5k
Adopting Kafka for the #1 job site in the world
ymyzk
1
690
Embedded SRE at Mercari
tcnksm
0
860
プルリク作ったらデプロイされる仕組み on ECS / SRE NEXT 2022
carta_engineering
1
500
ZOZOTOWNのProduction Readiness Checklistと信頼性向上の取り組み / Improvement the reliability of ZOZOTOWN with Production Readiness Checklist
akitok_
5
1.9k
Featured
See All Featured
Designing the Hi-DPI Web
ddemaree
272
32k
WebSockets: Embracing the real-time Web
robhawkes
57
5k
From Idea to $5000 a Month in 5 Months
shpigford
372
44k
How to train your dragon (web standard)
notwaldorf
57
3.8k
4 Signs Your Business is Dying
shpigford
169
20k
Product Roadmaps are Hard
iamctodd
34
6.1k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
100
5.9k
Gamification - CAS2011
davidbonilla
75
3.9k
Bootstrapping a Software Product
garrettdimon
295
110k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
655
120k
The Straight Up "How To Draw Better" Workshop
denniskardys
225
120k
A Philosophy of Restraint
colly
192
14k
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> = {};
まとめ օ͞Μָ͍͠ܕϨϕϧϓϩάϥϛϯάϥΠϑΛʂ