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
genericで強力な型が付いたコンポーネントを作ろう
Search
お窓
October 22, 2024
Programming
0
97
genericで強力な型が付いたコンポーネントを作ろう
こちらで発表したものです。初LTでした。
https://optim.connpass.com/event/330716/
お窓
October 22, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
楽して成果を出すためのセルフリソース管理
clipnote
0
210
Learn CPU architecture with Assembly
akkeylab
1
1.1k
Conquering Massive Traffic Spikes in Ruby Applications with Pitchfork
riseshia
0
100
気づいて!アプリからのSOS 〜App Store Connect APIで始めるパフォーマンス健康診断〜
waka12
0
190
Server Less Code More - コードを書かない時代に生きるサーバーレスデザイン / server-less-code-more
gawa
5
1.8k
まだ世にないサービスをAIと創る話 〜 失敗から学ぶフルスタック開発への挑戦 〜
katayamatg
0
150
エンジニアとして高みを目指す、 利益を生み出す設計の考え方 / design-for-profit
minodriven
17
9.6k
Reduxモダナイズ 〜コードのモダン化を通して、将来のライブラリ移行に備える〜
pvcresin
2
590
CSC509 Lecture 01
javiergs
PRO
1
420
メモリ不足との戦い〜大量データを扱うアプリでの実践例〜
kwzr
1
400
検索機能リプレイスを4ヶ月→2ヶ月に! AI Agentで実現した2倍速リプレイス
fuuki12
4
770
Чего вы не знали о строках в Python – Василий Рябов, PythoNN
sobolevn
0
140
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
How STYLIGHT went responsive
nonsquared
100
5.8k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
Building an army of robots
kneath
306
46k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
600
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
940
Transcript
genericで強力な型が付いたコ ンポーネントを作ろう お窓
自己紹介 お窓 Vue3を書く3年目フロントエンドエンジニア Twitter (𝕏) @shallow_omado お仕事 ネットショップSaaS管理画面のフロントエンド開発 推し事 ご注文はうさぎですか
? の 香風智乃(かふうちの) を推します 趣味 ニコニコ動画で日常系アニメを見たり とあるゲームのAPIを開発したり 2
3 Vuetify3 の VSelect コンポーネント のラッパーに強力な型定義を付けたお話 話す内容
4 VSelectコンポーネントとは 選択肢から 1つ(または複数 )要素を選べるコンポーネント
5 VSelectコンポーネントの悲しいところ 型の絞り込みが完全じゃない 😥 Vuetify 公式サイト https://vuetifyjs.com/ja/components/selects/
6 VSelectコンポーネントを普通に使ってみる model-valueに渡したのと 同じ型がupdate:model-valueに返る
7 VSelectコンポーネントを普通に使ってみる itemsと噛み合わない型の ref値も渡せてしまう
8 VSelectコンポーネントを普通に使ってみる itemsと噛み合わない item-titleやitem-valueを渡せてしまう
9 もっと厳密な型を作りたい (既にデザインカスタマイズのために VSelectのラップコンポーネントがあるので) 型定義を上手い具合に改善できないものか ... 🤔
https://azukiazusa.dev/blog/vue-generic-component/ 10 解決策となりそうな記事 👀
https://azukiazusa.dev/blog/vue-generic-component/ 11 解決策となりそうな記事 👀
12 実際にやってみる
13 実際にやってみる
14 できたもの
15 できたもの
16 書いた感想 - ラッパーが無い環境であれば VSelectデフォルトの型でも 問題ないかも? (ドキュメント通りのanyだと勘違いしていた) - withDefaultsとの相性は悪そう 型エラーを回避する方法を模索するも見つからず断念
17 今後の展望 - VSelect以外にも VComboboxやVRadioGroup、VIcon等 のラッパーを作ると 型定義を強化できそう - genericsを大量に定義するとLinter負荷が心配 型パフォーマンスを計測する方法があれば計測したい
- VSelectは本来テキスト配列も受け取る可能性がある その型もなんとか表現したい
18 まとめ ・VSelectの items や update:modelValueの 型定義は不完全なところがある ・VSelectをラップするコンポーネントがあったので genericsを使って型定義を強化した ・型定義がビシバシ効いてRef指定ミスが起こりづらくなった✨
関連資料 - Vue.js でジェネリックコンポーネントを使う - https://azukiazusa.dev/blog/vue-generic-component/ - 【Vue3】ジェネリクスコンポーネント + Panda
CSS を使ってコンポーネントを 作成してみる - https://zenn.dev/comm_vue_nuxt/articles/2fc54416899fcb 19