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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
uhyo
May 14, 2022
Technology
6.1k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TypeScript 4.7と型レベルプログラミング
2022年5月14日のTechFeed Conference 2022の発表スライドです。
uhyo
May 14, 2022
More Decks by uhyo
See All by uhyo
React、まだ楽しくて草
uhyo
7
4.1k
TypeScript 7.0の現在地と備え方
uhyo
6
3.3k
React 19時代のコンポーネント設計ベストプラクティス
uhyo
20
9.7k
型定義でAIと会話する:型を通じてAIに意図を伝えるテクニック
uhyo
1
84
タグ付きユニオン型を便利に使うテクニックとその注意点
uhyo
3
1.1k
ECMAScript仕様の最新動向: プロセスの変化と仕様のトレンド
uhyo
3
900
TypeScript 6.0で非推奨化されるオプションたち
uhyo
18
8.3k
Claude Code 10連ガチャ
uhyo
4
1.1k
AI時代、“平均値”ではいられない
uhyo
8
10k
Other Decks in Technology
See All in Technology
Rubyで音を視る
ydah
1
100
実装は速くなった、レビューはどうする? ― 自身のレビューをAIで再現させるサーヴァントエンジニアリングのすゝめ / Implementation got faster. So what about reviews? — An invitation to Servant Engineering: Recreating your own code reviews with AI
nrslib
7
4.1k
SIer20年! 培ったスキルがスタートアップで輝く時
shucho0103
0
490
Platform Engineering as a Product: Criteria for Improvement and Multi-Tenant Design
kumorn5s
0
520
LLMを「主役」にしないための 3つの原則
techtekt
PRO
0
120
AI活用を推進するために ファインディが下した、一つの小さな決断
starfish719
0
260
速さだけじゃない! VoidZero ツールが移行先に選ばれる理由
mizdra
PRO
6
760
ブロックチェーン / Blockchain
ks91
PRO
0
110
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
Agentic Web
dynamis
1
160
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development with AI-DLC
yoshidashingo
0
140
AWSシリコン最前線 〜AI時代のチップ選択を読み解く〜
htokoyo
1
180
Featured
See All Featured
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Typedesign – Prime Four
hannesfritz
42
3.1k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
440
How to Talk to Developers About Accessibility
jct
2
220
Odyssey Design
rkendrick25
PRO
2
690
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
300
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
600
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
200
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> = {};
まとめ օ͞Μָ͍͠ܕϨϕϧϓϩάϥϛϯάϥΠϑΛʂ