Кто-нибудь знает, как правильно добавить/расширить все собственные атрибуты HTML-элементов с помощью пользовательских?
С документацией TypeScript для объединения интерфейсов я подумал, что я мог бы просто сделать это:
interface HTMLElement {
block?: BEM.Block;
element?: BEM.Element;
modifiers?: BEM.Modifiers;
}
<div block="foo" />; // error
Но я получаю следующую ошибку Intellisense в vscode 1.6.1 (последняя версия):
[ts] Свойство 'block' не существует для типа 'HTMLProps'.
HTMLProps
на который они ссылаются, это React.HTMLProps<T>
и элемент div
объявлен для его использования следующим образом:
namespace JSX {
interface IntrinsicElements {
div: React.HTMLProps<HTMLDivElement>
}
}
Я попытался переопределить div
, но безрезультатно.
Связанный: https://github.com/Microsoft/TypeScript/issues/11684
Редактировать: Вот, что в конечном итоге работает для меня:
declare module 'react' {
interface HTMLAttributes<T> extends DOMAttributes<T> {
block?: string
element?: string
modifiers?: Modifiers // <-- custom interface
}
}