Ktoś wie, jak prawidłowo dodać/rozszerzyć wszystkie natywne atrybuty elementu HTML, używając niestandardowych?Jak dodać atrybuty do istniejących elementów HTML w TypeScript/JSX?
Z the TypeScript documentation for merging interfaces, myślałem, że może po prostu to zrobić:
interface HTMLElement {
block?: BEM.Block;
element?: BEM.Element;
modifiers?: BEM.Modifiers;
}
<div block="foo" />; // error
Ale pojawia się następujący błąd Intellisense w vscode 1.6.1 (najnowsza):
[ts] Własność ' blok "nie istnieje w typie" HTMLProps ".
HTMLProps
do których się odnosimy jest React.HTMLProps<T>
i element div
deklaruje go używać tak:
namespace JSX {
interface IntrinsicElements {
div: React.HTMLProps<HTMLDivElement>
}
}
Próbowałem redeclaring się div
, ale bezskutecznie.
pokrewne: https://github.com/Microsoft/TypeScript/issues/11684
Edit: Oto, co skończyło się dla mnie praca:
declare module 'react' {
interface HTMLAttributes<T> extends DOMAttributes<T> {
block?: string
element?: string
modifiers?: Modifiers // <-- custom interface
}
}
@MadaraUchiha Co powiesz na 'extend'ing' React.HTMLProps '? Lub nawet łączenie deklaracji z 'React.HTMLProps '? –
@ZevSpitz Próbowałem obu, a oni nie działali dobrze. Rozszerzanie nie pomaga, ponieważ nie mogę zmusić go do użycia mojego interfejsu, użyje po prostu 'React.HTMLProps', a scalanie deklaracji po prostu nie zadziałało, całkowicie je zignorowało. Jeśli możesz zrobić przypadek, w którym to działa, rozważ umieszczenie go jako odpowiedzi. –
@MadaraUchiha _merging deklaracji po prostu nie działał. Zakładam, że masz na myśli 'przestrzeń nazw React {interfejs HTMLProps {/ * niestandardowe elementy tutaj * /}}'? Nie wiem, jak wygląda deklaracja 'HTMLProps', może być konieczne dopasowanie jej. –