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
6
5.3k
TypeScript 4.7と型レベルプログラミング
2022年5月14日のTechFeed Conference 2022の発表スライドです。
uhyo
May 14, 2022
Tweet
Share
More Decks by uhyo
See All by uhyo
require(ESM)とECMAScript仕様
uhyo
4
1k
TypeScript Quiz (Encraft #12 Frontend Quiz Night)
uhyo
7
1.4k
Shadow DOMとCSSの現状
uhyo
11
6.2k
TypeScriptってどんな言語? 言語そのものを知る面白さ
uhyo
16
8.3k
App Router時代のデータ取得アーキテクチャ
uhyo
45
14k
ステート管理を超えるRecoil運用の考え方
uhyo
15
11k
ついに来る!TypeScript5.0の新機能
uhyo
21
15k
TypeScriptを振り回せ!
uhyo
28
8.9k
2020年代、使う技術はどう選ぶ?
uhyo
22
12k
Other Decks in Technology
See All in Technology
コードや知識を組み込む / Incorporate Code and knowledge
ks91
PRO
0
160
MLOpsの「壁」を乗り越える、LINEヤフーの Data Quality as Code
lycorptech_jp
PRO
8
670
BPStudyの200回を中心にIT業界を振り返る。そしてこれから
haru860
3
430
自己改善からチームを動かす! 「セルフエンジニアリングマネージャー」のすゝめ
shoota
6
1.1k
Rustで「プリズモイダル法」を利用して「土量計算」をガチでやる
nokonoko1203
1
340
AWSやJAWS-UGとの出会いを振り返る
yoyoyopg
1
160
Android Target SDK 35 (Android 15) 対応の概要
akkie76
0
180
Google Cloud Next '24 Recap(Cloud Run/k8s)
mokocm
0
370
Secrets of a PowerShell "Guru"
guyrleech
1
100
チームでロジカルシンキングに改めて向き合っている話 〜学習環境と実践⽅法〜
sansantech
PRO
3
3.3k
AWS学習者向けにAzureの解説スライドを作成した話
handy
3
210
M5stackで使用できるpHセンサの開発
shinrinakamura
0
260
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
14
1.5k
The Illustrated Children's Guide to Kubernetes
chrisshort
32
47k
Art, The Web, and Tiny UX
lynnandtonic
290
19k
Fashionably flexible responsive web design (full day workshop)
malarkey
398
65k
Build your cross-platform service in a week with App Engine
jlugia
226
17k
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
66
14k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
Principles of Awesome APIs and How to Build Them.
keavy
121
16k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
12
1k
The Cult of Friendly URLs
andyhume
74
5.7k
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> = {};
まとめ օ͞Μָ͍͠ܕϨϕϧϓϩάϥϛϯάϥΠϑΛʂ