Declaring custom JSX/HTML attributes in TypeScript
React's type definition file (@types/react/index.d.ts) only includes standard HTML and React elements and props/attributes.
Consider, for example, that you need to allow the banana prop of type string on the <img> element. In TypeScript+JSX, the <img> element uses the React.ImgHTMLAttributes<T> interface declared in @types/react/index.d.ts as follows:
declare namespace React {
//...
interface ImgHTMLAttributes<T> extends HTMLAttributes<T> {
alt?: string;
crossOrigin?: "anonymous" | "use-credentials" | "";
decoding?: "async" | "auto" | "sync";
height?: number | string;
// ...
}
//...
}To allow the custom HTML attribute, add the banana?: string; member to the React.ImgHTMLAttributes<T> interface like this:
// Inside your types.d.ts
namespace React {
interface ImgHTMLAttributes<T> {
banana?: string;
}
}This approach makes use of interface merging, a form of TypeScript's declaration merging.
Recommended for you
Product
Ea.
Months of the Year Poster, Greek-Labeled
Periodic Table Chart, 18-Column Layout, Breton/English-Labeled, 33.1 x 23.4 in (84.1 x 59.4 cm, Poster / Wall Chart)
2026 Wall Calendar, Volapük/English-Labeled, Sunday-Start Layout, Wire-Bound, 11.7 x 8.3 in (29.7 x 21.0 cm)
carbon IPA Transcription Poster
Solar System Poster, Lao-Labeled