Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
as(型アサーション)を書く前にできること
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
maroKanatani
November 16, 2024
Programming
4.5k
11
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
as(型アサーション)を書く前にできること
TSKaigiKansai 2024
maroKanatani
November 16, 2024
More Decks by maroKanatani
See All by maroKanatani
App Router を実プロダクトで採用して見えてきた勘所をちょっとだけ紹介
marokanatani
3
2.3k
長期運用に耐えるフロントエンド目指して
marokanatani
2
46k
S3のキー設計でハマった話
marokanatani
0
1.7k
Other Decks in Programming
See All in Programming
Java 27新機能 / Java 27 new features
kishida
2
210
プロダクトコードからライブラリの境界を見つける
elmetal
PRO
0
110
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
JRuby: Past, Present, and Future
headius
0
230
R8 の設定見直しでアプリサイズ削減
andpad
0
190
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
360
Are APIs Still Relevant in the AI Era?
soyuka
0
440
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
650
dotNET_vulnclicker_intro.pdf
deka_morita
0
130
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
8
5.6k
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
140
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
310
Featured
See All Featured
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
450
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Mind Mapping
helmedeiros
1
400
Ethics towards AI in product and experience design
skipperchong
2
420
Done Done
chrislema
187
17k
Writing Fast Ruby
sferik
630
63k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
530
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
Tell your own story through comics
letsgokoyo
1
1.1k
Typedesign – Prime Four
hannesfritz
42
3.2k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Transcript
クラスメソッド株式会社 TSKaigi Kansai 2024.11.16 as(型アサーション)を書く前にできること maroKanatani
Classmethod 自己紹介 Frontend Ops ...etc maroKanatani ソフトウェアエンジニア ほぼフロントエンドエンジニア Japan AWS
All Certifications Engineer (2022~2024)
as 使ってますか?
TSのコードレビューをしていて感じること any の濫用はよくない という風潮はある程度広まってきた …しかし as の濫用については any ほど広まってなさそう 有効な場面もあるが、カジュアルに使われることも多い印象
(適切に使っている人には釈迦に説法な話かも) > 理解が浅い人が真似することで良くない使い方が割れ窓的に広がることがある
なぜ as の濫用は良くないのか コンパイラの挙動を上書きしてしまう コンパイラよりも型について理解している場合は as を用いても良い? > 力には責任が伴う 潜在的に
any と同様の副作用があるとも言える >(自分は理解しているつもりでも)チームの他のメンバーは違うかもしれない とはいえ全く使わないのは難しい > スコープを最小限に留める、コメントを書くなどして用法用量を守る あくまで「濫用」が良くない
こんなコード書いていませんか?
こんなコード書いていませんか? いずれもサブタイプ関係にあるスーパータイプを サブタイプで型アサーションしているのが良くない
こんなコード書いていませんか?(修正版)
こんなコード書いていませんか?(修正版) 基本的にはちゃんと型ガードする
タグ付きユニオンを使ったリファクタ
タグ付きユニオンを使ったリファクタ 個別のプロパティをチェックするサンプルが多いが 判別用のプロパティを生やすのも場合によっては有効
zod を使った Scheme First なリファクタ
zod を使った Scheme First なリファクタ 型はスキーマから作成 パースする
インターフェース境界での as には要注意
インターフェース境界での as には要注意 role が string型に推論されるため as を使っている
インターフェース境界での as には要注意 role が string型に推論されるため as を使っている プロパティが増減した場合に 型エラーが発生しない
インターフェース境界での as には要注意(修正版)
インターフェース境界での as には要注意(修正版) 型制約をつける or satisfies を使う
as が必要な例
as が必要な例 result をミュータブルな オブジェクトとして扱っている 参考: 敗北者のTypeScript (https://qiita.com/uhyo/items/aae57ba0734e36ee846a) as が有効なスコープが最小限に留まっている
as を書く前に 型ガードや型制約、satisfiesで済ませられないか? 必要になる根本的な原因は何か? 割れ窓的に広がらないように必要に応じてコメントも書こう 実態に合わせてきちんとメンテすることで読み手側の負荷はきっと下がる その as はなぜ必要なのか? 必要な場合はスコープを小さく
型はドキュメント
ご清聴ありがとうございました