TypeScript обеспечивает строгую типизацию, которая позволяет выявлять ошибки на этапе компиляции и повышает надёжность фронтенд-приложений. В интеграции с Carbon Components Svelte использование TypeScript помогает точно определить свойства компонентов, их события и методы, обеспечивая автокомплешн и подсказки в IDE.
Компоненты Svelte можно типизировать с помощью
<script lang="ts">. Любой пропс
компонента объявляется с указанием типа:
<script lang="ts">
export let label: string;
export let disabled: boolean = false;
</script>
<Button {label} {disabled} />
label — обязательная строка.disabled — необязательное логическое значение с
дефолтным значением false.В Carbon Components Svelte это особенно важно для компонентов, таких как Button, Checkbox, TextInput, где свойства строго контролируют поведение UI.
Carbon Components Svelte использует кастомные события для взаимодействия компонентов с внешним кодом. TypeScript позволяет строго типизировать события с помощью сигнатур функций:
<script lang="ts">
import { createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher<{ click: MouseEvent }>();
function handleClick(event: MouseEvent) {
dispatch('click', event);
}
</script>
<Button on:click={handleClick}>Нажми меня</Button>
createEventDispatcher<{ click: MouseEvent }>()
гарантирует, что событие click всегда передаст объект типа
MouseEvent.Carbon Components Svelte поставляется с набором готовых TypeScript типов для всех компонентов. Пример для TextInput:
<script lang="ts">
import type { TextInputProps } from 'carbon-components-svelte';
import { TextInput } from 'carbon-components-svelte';
let inputProps: TextInputProps = {
id: 'example-input',
labelText: 'Введите текст',
placeholder: 'Например, Svelte',
invalid: false
};
</script>
<TextInput {...inputProps} />
TextInputProps содержит все допустимые свойства
компонента.Некоторые компоненты Carbon используют внутреннее состояние (например, Checkbox, Switch). Для управления состоянием в Svelte применяются реактивные переменные с типами:
<script lang="ts">
import { Checkbox } from 'carbon-components-svelte';
let checked: boolean = false;
function toggle() {
checked = !checked;
}
</script>
<Checkbox bind:checked={checked} label="Согласен" on:change={toggle} />
bind:checked автоматически синхронизирует переменную с
состоянием компонента.Компоненты Carbon поддерживают слоты для кастомизации содержимого. В TypeScript можно описывать, какие данные передаются в слот, используя generic параметры или интерфейсы:
<script lang="ts">
interface CustomSlotProps {
title: string;
}
let slotData: CustomSlotProps = { title: 'Привет, Svelte' };
</script>
<Card>
<div slot="footer">{slotData.title}</div>
</Card>
CustomSlotProps гарантирует, что
слот получает ожидаемые данные.Сочетание типизации пропсов и событий позволяет создать полностью безопасный компонент:
<script lang="ts">
import { Button } from 'carbon-components-svelte';
import type { ButtonProps } from 'carbon-components-svelte';
import { createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher<{ submit: { value: string } }>();
let buttonProps: ButtonProps = { kind: 'primary', size: 'sm' };
let inputValue: string = '';
function handleSubmit() {
dispatch('submit', { value: inputValue });
}
</script>
<input bind:value={inputValue} placeholder="Введите значение" />
<Button {...buttonProps} on:click={handleSubmit}>Отправить</Button>
ButtonProps гарантирует корректность всех свойств
кнопки.submit строго проверяется на наличие свойства
value типа string.createEventDispatcher и on:event позволяют
точно определить структуру передаваемых данных.bind:checked и
bind:value должны строго соответствовать типам
переменных.TypeScript в связке с Carbon Components Svelte не только обеспечивает безопасную работу с компонентами, но и делает код более читаемым и сопровождаемым, минимизируя риск ошибок и повышая эффективность разработки интерфейсов.