Atomico — это современная библиотека для создания веб-компонентов на JavaScript, которая предоставляет удобные механизмы для декларативного описания состояния, свойств и событий компонентов. Типизация играет ключевую роль в обеспечении надежности, предсказуемости поведения и автодополнения в редакторах кода, особенно при использовании TypeScript.
Свойства (props) в Atomico задаются с помощью функции
prop, которая позволяет указывать тип, значение по
умолчанию и некоторые дополнительные параметры. Типизация свойств
гарантирует правильное использование компонента как при чтении, так и
при модификации его состояния.
Пример типизированного свойства:
import { c, prop } from "atomico";
const Button = c({
props: {
label: prop.string({ default: "Нажми меня" }),
disabled: prop.boolean({ default: false }),
count: prop.number(),
},
render({ label, disabled, count }) {
return <button disabled={disabled}>{label} ({count})</button>;
}
});
Ключевые моменты:
prop.string(), prop.boolean(),
prop.number() — встроенные функции для типизации.default автоматически применяется, если
свойство не передано.Atomico позволяет определять свойства с пользовательскими типами или ограниченными значениями, что особенно полезно для создания строгих интерфейсов компонентов.
Пример перечисления допустимых значений:
const Alert = c({
props: {
type: prop.string<"success" | "warning" | "error">({ default: "success" }),
message: prop.string(),
},
render({ type, message }) {
return <div class={`alert ${type}`}>{message}</div>;
}
});
Особенности:
<...>)
позволяет ограничить набор допустимых значений.События в Atomico создаются с помощью функции useEvent и
могут быть типизированы для безопасной передачи данных из компонента
наружу.
import { c, useEvent } from "atomico";
type ToggleEventDetail = { checked: boolean };
const Toggle = c({
props: { checked: prop.boolean({ default: false }) },
render({ checked }) {
const toggle = useEvent<CustomEvent<ToggleEventDetail>>("toggle");
return (
<input
type="checkbox"
checked={checked}
onCha nge={(e) => toggle({ detail: { checked: e.target.checked } })}
/>
);
}
});
Особенности типизации событий:
CustomEvent<T> обеспечивает
строгость структуры данных.detail, что предотвращает ошибки при обработке
событий.useStateAtomico предоставляет хук useState для управления
локальным состоянием компонента. Тип состояния можно явно указать, что
помогает избежать неожиданных преобразований данных.
import { c, useState } from "atomico";
const Counter = c({
render() {
const [count, setCount] = useState<number>(0);
return (
<button onCl ick={() => setCount(count + 1)}>
Счетчик: {count}
</button>
);
}
});
Особенности:
useState<Type>(), контролирует
значение и функции обновления.Для сложных компонентов с большим количеством свойств и событий удобно определять интерфейсы TypeScript. Это делает код более читаемым и поддерживаемым.
interface ModalProps {
title: string;
visible: boolean;
onClose?: () => void;
}
const Modal = c<ModalProps>({
props: {
title: prop.string(),
visible: prop.boolean({ default: false }),
onClose: prop.any(),
},
render({ title, visible, onClose }) {
if (!visible) return null;
return (
<div class="modal">
<h2>{title}</h2>
<button onCl ick={onClose}>Закрыть</button>
</div>
);
}
});
Преимущества подхода:
Типизация компонентов в Atomico — это не просто рекомендация, а
инструмент для повышения надежности, предотвращения ошибок и улучшения
поддержки кода. Использование встроенных функций prop,
явных generic-типов для событий и состояния, а также интерфейсов
TypeScript позволяет создавать масштабируемые, предсказуемые и
безопасные компоненты.
Типизация охватывает все ключевые элементы:
detail,
безопасная передача данных.useState.Эта структура позволяет создавать компоненты, которые легко интегрируются в большие приложения и соответствуют современным требованиям к качеству кода.