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
35
genericで強力な型が付いたコンポーネントを作ろう
こちらで発表したものです。初LTでした。
https://optim.connpass.com/event/330716/
お窓
October 22, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
Tauriでネイティブアプリを作りたい
tsucchinoko
0
380
A Journey of Contribution and Collaboration in Open Source
ivargrimstad
0
1.1k
cmp.Or に感動した
otakakot
3
270
카카오페이는 어떻게 수천만 결제를 처리할까? 우아한 결제 분산락 노하우
kakao
PRO
0
120
광고 소재 심사 과정에 AI를 도입하여 광고 서비스 생산성 향상시키기
kakao
PRO
0
180
デザインパターンで理解するLLMエージェントの作り方 / How to develop an LLM agent using agentic design patterns
rkaga
9
1.5k
.NET のための通信フレームワーク MagicOnion 入門 / Introduction to MagicOnion
mayuki
1
2k
タクシーアプリ『GO』のリアルタイムデータ分析基盤における機械学習サービスの活用
mot_techtalk
6
1.7k
Figma Dev Modeで変わる!Flutterの開発体験
watanave
0
170
どうして僕の作ったクラスが手続き型と言われなきゃいけないんですか
akikogoto
1
130
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
130
Compose 1.7のTextFieldはPOBox Plusで日本語変換できない
tomoya0x00
0
210
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
52
13k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
Code Reviewing Like a Champion
maltzj
520
39k
Visualization
eitanlees
145
15k
Typedesign – Prime Four
hannesfritz
40
2.4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
910
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
How to Ace a Technical Interview
jacobian
276
23k
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