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.6k
TypeScript 4.7と型レベルプログラミング
2022年5月14日のTechFeed Conference 2022の発表スライドです。
uhyo
May 14, 2022
Tweet
Share
More Decks by uhyo
See All by uhyo
tsconfig.jsonの最近の新機能 ファイルパス編
uhyo
7
2k
非同期処理を活用しながらRust製wasmとJSを連携する方法(wasm-bindgenを使いたくない人向け)
uhyo
4
3.5k
tsconfig.jsonの設定を見直そう!フロントエンド向け 2024夏
uhyo
25
8.4k
React 19を概念から理解する
uhyo
21
9.5k
require(ESM)とECMAScript仕様
uhyo
6
1.8k
TypeScript Quiz (Encraft #12 Frontend Quiz Night)
uhyo
8
1.6k
Shadow DOMとCSSの現状
uhyo
11
7.2k
TypeScriptってどんな言語? 言語そのものを知る面白さ
uhyo
16
8.9k
App Router時代のデータ取得アーキテクチャ
uhyo
49
16k
Other Decks in Technology
See All in Technology
GitHub Universe: Evaluating RAG apps in GitHub Actions
pamelafox
0
130
pandasはPolarsに性能面で追いつき追い越せるのか
vaaaaanquish
2
1.1k
AWS re:Inventを徹底的に楽しむためのTips / Tips for thoroughly enjoying AWS re:Invent
yuj1osm
0
180
失敗しないOpenJDKの非互換調査
tabatad
0
230
[PyCon Korea 2024] Lightning Talk: PyPI패키지를 의심하세요
studioego
PRO
0
130
リファクタリングへの耐性が高いモデルベースの統合テストの紹介 / Model-Base Integration Test for Refactoring
yuitosato
5
1.5k
キーワードの再整理のススメ ~テストタイプ/テストレベルで最適化!~/20241025 Midori Inada
shift_evolve
0
120
Emacs x Nostr
hakkadaikon
1
120
新R25、乃木坂46 Mobileなどのファンビジネスを支えるマルチテナンシーなプラットフォームの全体像 / cam-multi-cloud
cyberagentdevelopers
PRO
1
110
AWS SAW(AWS Support Automation Workflows)をもっと広めたい
kazzpapa3
2
170
Hotwire光の道とStimulus
nay3
5
2.2k
Databricksで構築する初めての複合AIシステム - ML15min
taka_aki
2
1.3k
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
79
8.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
355
29k
Side Projects
sachag
452
42k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.6k
YesSQL, Process and Tooling at Scale
rocio
167
14k
Designing the Hi-DPI Web
ddemaree
280
34k
Happy Clients
brianwarren
97
6.7k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
37
1.8k
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> = {};
まとめ օ͞Μָ͍͠ܕϨϕϧϓϩάϥϛϯάϥΠϑΛʂ