Spec-Zone.ru › Lit 2

Определение компонента

Определите компонент Lit, создав класс, расширяющий LitElement, и зарегистрировав свой класс в браузере:

@customElement('simple-greeting')
export class SimpleGreeting extends LitElement { /* ... */ }

Декоратор @customElement — это сокращённая запись вызова customElements.define, которая регистрирует класс пользовательского элемента в браузере и связывает его с именем элемента (в данном случае — simple-greeting).

Если вы используете JavaScript или не используете декораторы, можно напрямую вызвать define():

export class SimpleGreeting extends LitElement { /* ... */  }
customElements.define('simple-greeting', SimpleGreeting);

Компонент Lit — это HTML-элемент

Определяя компонент Lit, вы определяете пользовательский HTML-элемент. Поэтому вы можете использовать новый элемент так же, как любой встроенный элемент:

<simple-greeting name="Markup"></simple-greeting>
const greeting = document.createElement('simple-greeting');

Базовый класс LitElement является подклассом HTMLElement, поэтому компонент Lit наследует все стандартные свойства и методы HTMLElement.

В частности, LitElement наследует от ReactiveElement, который реализует реактивные свойства и, в свою очередь, наследует от HTMLElement.

Inheritance diagram showing LitElement inheriting from ReactiveElement, which in turn inherits from HTMLElement. LitElement is responsible for templating; ReactiveElement is responsible for managing reactive properties and attributes; HTMLElement is the standard DOM interface shared by all native HTML elements and custom elements.

Обеспечение корректных определений типов TypeScript

TypeScript определяет класс HTML-элемента, возвращаемого некоторыми API DOM, по имени тега. Например, document.createElement('img') возвращает экземпляр HTMLImageElement со свойством src: string.

Пользовательские элементы могут обрабатываться таким же образом, если добавить запись в HTMLElementTagNameMap следующим образом:

@customElement('my-element')
export class MyElement extends LitElement {
  @property({type: Number})
  aNumber: number = 5;
  /* ... */
}

declare global {
  interface HTMLElementTagNameMap {
    "my-element": MyElement;
  }
}

После этого следующий код успешно проходит проверку типов:

const myElement = document.createElement('my-element');
myElement.aNumber = 10;

Мы рекомендуем добавлять запись HTMLElementTagNameMap для всех элементов, созданных на TypeScript, и включать определения типов .d.ts в публикуемый npm-пакет.

Изменить эту страницу

© Google LLC
Licensed under the Creative Commons Attribution 3.0 Unported License.
https://lit.dev/docs/v2/components/defining/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API