Svelte
How to extend prop types from HTML elements
For everyone who wants to create a wrapper component around a certain HTML element and wants a way to type “this component accepts all properties of X”, here’s how you do it as of Svelte version 3.55:
<script lang="ts">
import type { HTMLButtonAttributes } from 'svelte/elements'
interface $$Props extends HTMLButtonAttributes {
error: boolean // your own additional typings
}
export let error: boolean
// ...
</script>
<!-- ... -->
<button>
<slot />
</button>
Adding classes conditionally
<!-- Button.svelte -->
<script>
export let primary = false
export let secondary = false
</script>
<button
class:c-btn--primary="{primary}"
class:c-btn--secondary="{secondary}"
class="c-btn"
>
<slot></slot>
</button>
<Button secondary="{true}">Click me</Button>