Typescript utökar HTMLIFrameElement
Jag använder en YouTube-iframe som har attributet type, tydligen är type inte en egenskap som finns på Iframe. Hur skulle jag lägga till detta attribut i Iframe-typsdefinitionen?
Definitionen av Iframe i min React-komponent:
<iframe
id="ytplayer"
type="text/html"
src={someSource}
frameBorder="0">
</iframe>
Felet som TS kastar:
Property 'type' does not exist on type 'DetailedHTMLProps<IframeHTMLAttributes<HTMLIFrameElement>, HTMLIFrameElement>'
Jag har försökt något liknande följande med liten framgång:
interface HTMLIFrameElement {
type?: string;
}
Svar #1
Redigera
Jag missförstod och trodde att du ville lägga till icke-standardiserade egenskaper till iframe och inte att YouTube redan tillhandahåller det med type-egenskapen.
I det här fallet kan type-egenskapen säkert ignoreras och tas bort eftersom den inte kommer att förändra iframe:s beteende på något sätt.
Originalt svar
Istället för att lägga till en icke-standardegenskap på en iframe, skulle jag föreslå att använda ett data-attribut.
Dataattribut tillåter dig att lägga till extra data till HTML-element utan att manipulera deras typer och TypeScript stöder dem fullt ut.
Dataattribut får prefixet data-, så i ditt fall skulle du få:
<iframe
id="ytplayer"
data-type="text/html"
src={someSource}
frameBorder="0">
</iframe>
Svar #2
Försök att lägga till detta attribut globalt, så här:
declare global {
interface HTMLIFrameElement {
type?: string;
}
}
På det sättet bör attributet läggas till i det globala HTMLIFrameElement-gränssnittet. Dessutom, efter att Typescript ser denna deklaration en gång, kommer detta attribut alltid att vara tillgängligt på detta gränssnitt, så om du vill använda det på andra ställen i din kod kan du placera denna deklaration någonstans nära toppen av ditt bundel.
