😎

Svelteでコンポーネント作るときにHTML属性のtype補完を効かせる方法

2023/10/22に公開

またReactとの比較になってしまいますが

Reactの場合

import { ButtonHTMLAttributes, FC } from 'react';

type ButtonProps = ButtonHTMLAttributes<{}>

export function Button(props: ButtonProps) {
  return <button {...props}>hello</button>
}

以下のように補完が効きます。

screenshhot

Svelteの場合

ほぼ同じ書き方になりますが

<script lang="ts">
  import type { HTMLButtonAttributes } from "svelte/elements";

  interface $$Props extends HTMLButtonAttributes {}
</script>

<button {...$$props}>
  hello
</button>

screenshot-svelte

余談

reactの場合はやはりtsとの相性がよく、カーソル当てたときにpropsの定義を確認することができます。

screenshot-type

svelteの場合はclassになってしまい、type情報は確認できません。

screenshot-type-svelte

参考

https://github.com/sveltejs/language-tools/issues/442#issuecomment-1359423782

Discussion