FAST Element — это библиотека для создания веб-компонентов с использованием современных возможностей JavaScript и TypeScript. Одним из ключевых аспектов работы с FAST Element является использование utility-типов, которые упрощают определение свойств компонентов, их реактивность и интеграцию с шаблонами.
Utility-типы FAST Element представляют собой набор вспомогательных типов TypeScript, обеспечивающих строгую типизацию для свойств, событий и методов компонентов. Они помогают создавать безопасный и предсказуемый код при работе с динамическими интерфейсами.
FASTElement и
ObservableБазовый класс всех компонентов FAST — это FASTElement.
Он предоставляет механизм реактивных свойств и управления жизненным
циклом компонентов.
import { FASTElement, customElement, observable } from "@microsoft/fast-element";
@customElement({ name: "my-element", template: `<div>${x => x.message}</div>` })
class MyElement extends FASTElement {
@observable message: string = "Привет, FAST!";
}
@observable — utility-декоратор, делающий свойство
реактивным. Любое изменение message автоматически обновляет
DOM.PartialFASTElement
и расширение компонентовДля работы с частичными конфигурациями компонентов используется
utility-тип
PartialFASTElement<T>:
type PartialFASTElement<T> = {
[P in keyof T]?: T[P];
};
Применение:
function updateElement(el: PartialFASTElement<MyElement>) {
Object.assign(myElementInstance, el);
}
updateElement({ message: "Новая строка" });
FASTEvent и FASTCustomEventДля строгой типизации событий FAST Element предоставляет
utility-типы FASTEvent и
FASTCustomEvent. Они наследуются от стандартного
Event и добавляют поддержку generics для
detail.
import { FASTElement, FASTCustomEvent } from "@microsoft/fast-element";
class MyElement extends FASTElement {
emitCustomEvent() {
this.$emit("custom", { value: 42 });
}
}
type MyEvent = FASTCustomEvent<{ value: number }>;
FASTCustomEvent<T> обеспечивает строгую типизацию
объекта detail.ViewTemplate и
HTMLTemplateResultFAST Element использует шаблоны для рендеринга DOM. Utility-типы помогают описывать структуру и динамические части шаблона.
import { html, ViewTemplate } from "@microsoft/fast-element";
const template: ViewTemplate<MyElement> = html<MyElement>`
<p>${x => x.message}</p>
`;
ViewTemplate<T> гарантирует, что внутри шаблона
используются только свойства типа T.ElementDefinitionContext
и конфигурация компонентовДля глобальной конфигурации и расширения функциональности компонентов
используется тип ElementDefinitionContext. Он определяет,
как компонент будет регистрироваться и какие базовые возможности
получает.
import { FASTElement, ElementDefinitionContext } from "@microsoft/fast-element";
const context: ElementDefinitionContext = new ElementDefinitionContext();
context.register(
class extends FASTElement {
@observable message = "Контекст FAST";
},
{ name: "context-element" }
);
ObservableArray и
ObservableObjectДля работы с динамическими коллекциями и объектами FAST предоставляет специализированные типы:
import { ObservableArray } from "@microsoft/fast-element";
const items: ObservableArray<string> = new ObservableArray(["a", "b", "c"]);
items.push("d");
ObservableArray<T> — массив, который
автоматически уведомляет шаблон о изменениях.push,
splice, map) с реактивностью без
дополнительных подписок.Utility-типы FAST Element можно комбинировать с другими TypeScript-типами для создания мощных и безопасных интерфейсов компонентов:
type ComponentProps = PartialFASTElement<MyElement> & { id?: string };
function createElement(props: ComponentProps) {
const el = document.createElement("my-element") as MyElement;
Object.assign(el, props);
return el;
}
const el = createElement({ message: "Привет", id: "comp1" });
Utility-типы FAST Element служат каркасом для безопасной, гибкой и типизированной работы с компонентами. Они охватывают:
@observable),PartialFASTElement),FASTCustomEvent),ViewTemplate),ObservableArray),ElementDefinitionContext).Их использование делает разработку компонентов быстрым, предсказуемым и устойчивым к ошибкам.