Как предлагалось ранее, вы можете использовать <svelte:component>
, но я полагаю, что это слишком много для вашего варианта использования (вам нужно создать 2 отдельных компонента только для vanilla button
и a
). Похоже, вам нужна только лучшая читаемость. Чтобы получить больше DRY, можно использовать Spread props .
<script>
export let url;
const classes = 'class-1 class-2';
const outlined = true;
const disabled = true;
$: props = {
class: `button ${classes} ${outlined ? 'button--outlined' : 'button--solid'}`,
disabled
}
</script>
{#if url}
<a {...props} href={url}><slot/></a>
{:else}
<button {...props} on:click><slot/></button>
{/if}