@@ -238,7 +238,7 @@ export function register() {
238238}
239239```
240240
241- コンポーネントの利用者は、Vue ファイル内の要素を使用できます
241+ コンポーネントの利用者は、Vue ファイル内の要素を使用できます:
242242
243243``` vue
244244<script setup>
@@ -263,8 +263,8 @@ customElements.define('some-bar', MyBar)
263263
264264export function MyComponent () {
265265 return <>
266- < some- foo ... >
267- < some- bar ... >< / some- bar>
266+ < some- foo ... >
267+ < some- bar ... >< / some- bar>
268268 < / some- foo>
269269 < / >
270270}
@@ -293,8 +293,10 @@ customElements.define('some-element', SomeElement)
293293// Vue の GlobalComponents タイプに新しい要素タイプを追加します。
294294declare module ' vue' {
295295 interface GlobalComponents {
296- // ここでは必ず Vue コンポーネントタイプ(SomeElement **ではなく** SomeComponent)を渡してください。
297- // カスタム要素にはハイフンが必要です。そのため、ここではハイフン付きの要素名を使用します。
296+ // ここでは必ず Vue コンポーネントタイプを渡してください。
297+ // (SomeElement **ではなく** SomeComponent)
298+ // カスタム要素にはハイフンが必要です。
299+ // そのため、ここではハイフン付きの要素名を使用します。
298300 ' some-element' : typeof SomeComponent
299301 }
300302}
@@ -304,14 +306,12 @@ declare module 'vue' {
304306
305307Vue で構築されていないカスタム要素の SFC テンプレートで型チェックを有効にする推奨の方法をご紹介します。
306308
307-
308309> [ !Note]
309310> この方法は、カスタム要素を作成する際に使用するフレームワークによって異なる場合があります。
310311
311312
312313いくつかの JS プロパティとイベントが定義されたカスタム要素があり、それが ` some-lib ` というライブラリーに同梱されているとします:
313314
314-
315315``` ts
316316// file: some-lib/src/SomeElement.ts
317317
@@ -350,10 +350,8 @@ export class AppleFellEvent extends Event {
350350
351351実装の詳細は省略しますが、重要な部分は、プロパティの型とイベントの型という 2 つの型定義があることです。
352352
353-
354353Vue でカスタム要素の型定義を簡単に登録するための型ヘルパーを作成してみましょう
355354
356-
357355``` ts
358356// file: some-lib/src/DefineCustomElement.ts
359357
@@ -367,15 +365,17 @@ type DefineCustomElement<
367365 // Vue は、特に `$props` 型からプロパティ定義を読み取ります。要素のプロパティを
368366 // グローバルな HTML プロパティと Vue の特別なプロパティと組み合わせることに
369367 // 注意してください。
370- /** @deprecated カスタム要素参照では、$props プロパティを使用しないでください。これはテンプレートプロパティ型専用です。 */
368+ /** @deprecated カスタム要素参照では、$props プロパティを使用しないでください。
369+ これはテンプレートプロパティ型専用です。 */
371370 $props: HTMLAttributes &
372371 Partial <Pick <ElementType , SelectedAttributes >> &
373372 PublicProps
374373
375374 // イベントタイプを明示的に定義するには、$emit を使用します。
376375 // Vue は、イベントタイプを`$emit`タイプから読み取ります。
377376 // `$emit` は、`Events` にマッピングする特定のフォーマットを必要とします。
378- /** @deprecated カスタム要素参照では $emit プロパティを使用しないでください。これはテンプレートプロパティ型専用です。 */
377+ /** @deprecated カスタム要素参照では $emit プロパティを使用しないでください。
378+ これはテンプレートプロパティ型専用です。 */
379379 $emit: VueEmit <Events >
380380}
381381
@@ -397,7 +397,6 @@ type VueEmit<T extends EventMap> = EmitFn<{
397397
398398型ヘルパーを使用して、Vue テンプレートで型チェックのために公開すべき JS プロパティを選択できます:
399399
400-
401400` ` ` ts
402401// file: some-lib/src/SomeElement.vue.ts
403402
@@ -423,7 +422,6 @@ declare module 'vue' {
423422
424423` some-lib ` が TypeScript のソースファイルを ` dist/ ` フォルダにビルドするとします。 ` some-lib ` のユーザーは、` SomeElement ` をインポートし、Vue SFC で次のように使用できます:
425424
426-
427425``` vue
428426<script setup lang="ts">
429427// これにより、要素が作成され、ブラウザーに登録されます。
@@ -446,7 +444,8 @@ onMounted(() => {
446444 el.value!.someMethod()
447445 )
448446
449- // これらの props は使用しないでください。これらは `undefined` です(IDE では取り消し線が表示されます):
447+ // これらの props は使用しないでください。これらは `undefined` です
448+ // IDE では取り消し線が表示されます:
450449 el.$props
451450 el.$emit
452451})
@@ -469,7 +468,6 @@ onMounted(() => {
469468
470469要素に型定義がない場合、プロパティとイベントの型はより手動で定義することができます:
471470
472-
473471``` vue
474472<script setup lang="ts">
475473// `some-lib` が型定義のないプレーンな JavaScript で、TypeScript が型を
@@ -505,10 +503,6 @@ declare module 'vue' {
505503
506504カスタム要素の作成者は、ライブラリーからフレームワーク固有のカスタム要素の型定義を自動的にエクスポートすべきではありません。例えば、ライブラリーの残りの部分もエクスポートする ` index.ts ` ファイルからエクスポートすべきではありません。そうしないと、ユーザーに予期しないモジュール拡張エラーが発生します。ユーザーは、必要なフレームワーク固有の型定義ファイルをインポートする必要があります。
507505
508-
509-
510-
511-
512506## Web コンポーネント と Vue コンポーネントの比較 {#web-components-vs-vue-components}
513507
514508開発者の中には、フレームワークに依存した独自のコンポーネントモデルは避けるべきであり、カスタム要素のみを使用することでアプリケーションの「将来性」を確保できると考える人もいます。ここでは、この考え方が問題を単純化しすぎていると思われる理由を説明します。
0 commit comments