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
as(型アサーション)を書く前にできること
Search
maroKanatani
November 16, 2024
Programming
4.3k
11
Share
as(型アサーション)を書く前にできること
TSKaigiKansai 2024
maroKanatani
November 16, 2024
More Decks by maroKanatani
See All by maroKanatani
App Router を実プロダクトで採用して見えてきた勘所をちょっとだけ紹介
marokanatani
3
2k
長期運用に耐えるフロントエンド目指して
marokanatani
2
45k
S3のキー設計でハマった話
marokanatani
0
1.6k
Other Decks in Programming
See All in Programming
Zod v4 Codec でスキーマに型変換を埋め込む REST API 設計 #TSKaigi2026
ryutaro_yako
0
140
AI時代になぜ書くのか
mutsumix
0
450
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
370
新規プロダクトを高速で生み出すハーネスエンジニアリング
seanchas116
3
270
Skillは並べた。動かなかった。契約で繋いだ。— 65個のSkillから、自走する開発サイクルへ
junholee
0
720
1人1案件のプロダクトエンジニア時代に、"プロセス監督"としてチャレンジしたこと
non0113
0
310
inferと仲良くなる10分間
ryokatsuse
1
250
柔軟なPDFレイアウトエディタを支える型システム設計 — Discriminated UnionとConditional Typeの実践
minako__ph
3
580
今さら聞けないCancellationToken
htkym
0
180
Talking to terminals (and how they talk back) (KotlinConf 2026)
jakewharton
PRO
1
110
ふつうのFeature Flag実践入門
irof
2
480
デフォルト運用のCodeRabbit、1年で何が変わったか / How CodeRabbit Changed Our Code Review in 1 Year
bake0937
1
100
Featured
See All Featured
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
560
The SEO identity crisis: Don't let AI make you average
varn
0
470
Java REST API Framework Comparison - PWX 2021
mraible
34
9.3k
Mind Mapping
helmedeiros
PRO
1
200
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Paper Plane (Part 1)
katiecoart
PRO
0
7.8k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
360
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
The Language of Interfaces
destraynor
162
26k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
140
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
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 はなぜ必要なのか? 必要な場合はスコープを小さく
型はドキュメント
ご清聴ありがとうございました