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
React 19 + Jotaiを試して気づいた注意点
uhyo
8
2.2k
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
3
2k
tsconfig.jsonの最近の新機能 ファイルパス編
uhyo
7
2.6k
非同期処理を活用しながらRust製wasmとJSを連携する方法(wasm-bindgenを使いたくない人向け)
uhyo
4
3.8k
tsconfig.jsonの設定を見直そう!フロントエンド向け 2024夏
uhyo
26
9.3k
React 19を概念から理解する
uhyo
22
10k
require(ESM)とECMAScript仕様
uhyo
7
2k
TypeScript Quiz (Encraft #12 Frontend Quiz Night)
uhyo
8
1.7k
Shadow DOMとCSSの現状
uhyo
11
7.4k
Other Decks in Technology
See All in Technology
[Ruby] Develop a Morse Code Learning Gem & Beep from Strings
oguressive
1
150
KubeCon NA 2024 Recap: How to Move from Ingress to Gateway API with Minimal Hassle
ysakotch
0
200
プロダクト開発を加速させるためのQA文化の築き方 / How to build QA culture to accelerate product development
mii3king
1
260
サービスでLLMを採用したばっかりに振り回され続けたこの一年のあれやこれや
segavvy
2
410
Postman と API セキュリティ / Postman and API Security
yokawasa
0
200
サイバー攻撃を想定したセキュリティガイドライン 策定とASM及びCNAPPの活用方法
syoshie
3
1.2k
1等無人航空機操縦士一発試験 合格までの道のり ドローンミートアップ@大阪 2024/12/18
excdinc
0
160
LINEスキマニにおけるフロントエンド開発
lycorptech_jp
PRO
0
330
権威ドキュメントで振り返る2024 #年忘れセキュリティ2024
hirotomotaguchi
2
740
第3回Snowflake女子会_LT登壇資料(合成データ)_Taro_CCCMK
tarotaro0129
0
190
UI State設計とテスト方針
rmakiyama
2
550
マルチプロダクト開発の現場でAWS Security Hubを1年以上運用して得た教訓
muziyoshiz
2
2.3k
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
Building Applications with DynamoDB
mza
91
6.1k
Code Review Best Practice
trishagee
65
17k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
520
Docker and Python
trallard
42
3.1k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
Building Better People: How to give real-time feedback that sticks.
wjessup
365
19k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
170
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
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> = {};
まとめ օ͞Μָ͍͠ܕϨϕϧϓϩάϥϛϯάϥΠϑΛʂ