typescript - Hvordan kan jeg erklære/ignorere en manglende JSX-type?
Jeg vil gjerne bruke SVG use-elementet i en .tsx-fil:
<mask id="mask1">
<use ... />
</mask>
Jeg transpilerer dette direkte til React-kall. Imidlertid fortsetter jeg å få følgende feil:
Egenskapen 'use' finnes ikke på typen 'JSX.IntrinsicElements'.
Jeg tror dette elementet mangler fra standardbiblioteksdefinisjonene. Hvordan kan jeg erklære denne typen slik at TypeScript-kompilatoren kan se den, på samme måte som jeg kan erklære en klasse eller variabel? De vanlige declare var og declare class-utsagnene har ingen effekt.
Hvis det ikke er mulig, hvordan kan jeg få TypeScript-kompilatoren til å ignorere denne feilen?
Svar #1
Hvis du vil ignorere en feil inline, bruk denne merkelige syntaksen:
{/*
// @ts-ignore */}
<Foo id="fooDoesNotHaveIdType" />
Hentet fra https://github.com/Microsoft/TypeScript/issues/27552
Svar #2
Jeg prøvde @Mikey sin løsning, det fungerte ikke, men følgende fungerer for meg:
<Foo
/*
// @ts-ignore */
id="foo does not have IdType"
baz="foo Have bazType"
/>
I det ovenstående ignorerer jeg typefeil i egenskapen id
Svar #3
En use inne i mask kaster ikke lenger en typefeil, men hvis det fortsatt gjorde det i dag, kunne du:
<mask id="mask1">
{/* @ts-ignore */}
<use ... />
</mask>
Svar #4
Du kan bruke @ts-ignore:
{/* @ts-ignore */}
<mask id="mask1">
<use ... />
</mask>
Det fungerer også hvis du bruker inline-betingelser:
{
/* @ts-ignore */ myCondition && (
<mask id="mask1">
<use ... />
</mask>
)
}
Svar #5
Per 20.03.22 virker den beste løsningen for meg å være /* @ts-expect-error */:
<ComponentWithTroublesomeProp
okayProp={a}
anotherOkayProp={b}
/* @ts-expect-error */
problematicProp={cGotTroubles}
yetAnotherOkayProp={d}
/>
Dømt ut fra den relevante GitHub-issuen, er det som det aksepterte svaret foreslår nå utdatert.
Du kan også prøve // @ts-ignore, men hvis du har @typescript-eslint satt opp, har du sannsynligvis regelen @typescript-eslint/ban-ts-comment aktivert, noe som betyr at du må gjøre noe sånt som dette, bruke to linjer i stedet for én:
<ComponentWithTroublesomeProp
okayProp={a}
anotherOkayProp={b}
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
problematicProp={cGotTroubles}
yetAnotherOkayProp={d}
/>
