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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
uhyo
May 14, 2022
Technology
7
6.1k
TypeScript 4.7と型レベルプログラミング
2022年5月14日のTechFeed Conference 2022の発表スライドです。
uhyo
May 14, 2022
Tweet
Share
More Decks by uhyo
See All by uhyo
React 19時代のコンポーネント設計ベストプラクティス
uhyo
18
8k
型定義でAIと会話する:型を通じてAIに意図を伝えるテクニック
uhyo
1
46
タグ付きユニオン型を便利に使うテクニックとその注意点
uhyo
3
1k
ECMAScript仕様の最新動向: プロセスの変化と仕様のトレンド
uhyo
3
820
TypeScript 6.0で非推奨化されるオプションたち
uhyo
17
7.2k
Claude Code 10連ガチャ
uhyo
4
1k
AI時代、“平均値”ではいられない
uhyo
8
4k
意外と難しいGraphQLのスカラー型
uhyo
5
1.1k
RSCの時代にReactとフレームワークの境界を探る
uhyo
13
4.9k
Other Decks in Technology
See All in Technology
vLLM Community Meetup Tokyo #3 オープニングトーク
jpishikawa
0
340
決済サービスを支えるElastic Cloud - Elastic Cloudの導入と推進、決済サービスのObservability
suzukij
2
630
JAWSDAYS2026_A-6_現場SEが語る 回せるセキュリティ運用~設計で可視化、AIで加速する「楽に回る」運用設計のコツ~
shoki_hata
0
3k
Keycloak を使った SSO で CockroachDB にログインする / CockroachDB SSO with Keycloak
kota2and3kan
0
110
マルチプレーンGPUネットワークを実現するシャッフルアーキテクチャの整理と考察
markunet
2
240
スクリプトの先へ!AIエージェントと組み合わせる モバイルE2Eテスト
error96num
0
170
猫でもわかるKiro CLI(AI 駆動開発への道編)
kentapapa
0
170
クラウド × シリコンの Mashup - AWS チップ開発で広がる AI 基盤の選択肢
htokoyo
2
240
Dr. Werner Vogelsの14年のキーノートから紐解くエンジニアリング組織への処方箋@JAWS DAYS 2026
p0n
1
130
僕、S3 シンプルって名前だけど全然シンプルじゃありません よろしくお願いします
yama3133
1
210
PMとしての意思決定とAI活用状況について
lycorptech_jp
PRO
0
120
AWSの資格って役に立つの?
tk3fftk
1
330
Featured
See All Featured
Design in an AI World
tapps
0
170
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
260
How to build a perfect <img>
jonoalderson
1
5.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
100
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Scaling GitHub
holman
464
140k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
280
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
860
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> = {};
まとめ օ͞Μָ͍͠ܕϨϕϧϓϩάϥϛϯάϥΠϑΛʂ