Svelteの$$restPropsと$$propsについて
$$props
$$props は、export で宣言されていないものも含めて、コンポーネントに渡されるすべてのプロパティ(props)を参照します。これは Svelte の最適化が難しいので、一般的には推奨されません。しかし、コンパイル時にどのようなプロパティがコンポーネントに渡されるかわからない場合など、稀なケースでは便利です。
下記の様に、Parent.svelteからChild.svelteを呼び込んでいる構造のコンポーネントがあるとする。
# Parent.svelte
<script lang="ts">
import Child from "./Child.svelte"
let name = "Taro";
let age = 18;
let gender = "man"
</script>
<Child {name} {age} {gender}/>
<style lang="postcss">
</style>
#Child.svelte
<script lang="ts">
console.log($$props)
//Parentから渡されたpropsが全て格納されている。
</script>
この場合、Childコンポーネントでname, age, genderをexportしていないが、コンパイルエラーとなりません。
なぜなら、$$propsで、Parentコンポーネントから渡される全てのprops(今回の場合は、name,age,gender)を受け取っているからです。
ログ.
{name: 'Taro', age: 18, gender: 'man'}
$$restProps
$$restProps には、exportで宣言されていないプロパティ(props)のみが含まれます。
これは他の未知の属性をコンポーネントの要素に渡すために使用できます。
$$propsと同じ最適化の問題を共有しており、同様に推奨されません。
exportされていないpropsのみを$$restPropsは受け取っています。
下記の場合、Child.svelteでnameはexportされているので$$restPropsには格納されていません。
# Parent.svelte
<script lang="ts">
import Child from "./Child.svelte"
let name = "Taro";
let age = 18;
let gender = "man"
</script>
<Child {name} {age} {gender}/>
<style lang="postcss">
</style>
<script lang="ts">
export let name=""
console.log($$restProps)
//Parentから渡されたpropsのうち、exportされていないものだけが格納されている。
</script>
ログ.
{age: 18, gender: 'man'}