Skip to content

Commit 33189b8

Browse files
authored
feat(jsx): improve type (MIME) attribute types (#3305)
* feat(jsx): improve `type` (MIME) attribute types embed, link, object, script, source, and style elements * fix(jsx): `source` element allows only media mime in type attribute
1 parent 0a94e53 commit 33189b8

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

src/jsx/intrinsic-elements.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ export namespace JSX {
287287
interface EmbedHTMLAttributes extends HTMLAttributes {
288288
height?: number | string | undefined
289289
src?: string | undefined
290-
type?: string | undefined
290+
type?: StringLiteralUnion<BaseMime> | undefined
291291
width?: number | string | undefined
292292
}
293293

@@ -495,7 +495,7 @@ export namespace JSX {
495495
imagesizes?: string | undefined
496496
referrerpolicy?: HTMLAttributeReferrerPolicy | undefined
497497
sizes?: string | undefined
498-
type?: string | undefined
498+
type?: StringLiteralUnion<BaseMime> | undefined
499499
charSet?: string | undefined
500500

501501
// React 19 compatibility
@@ -607,7 +607,7 @@ export namespace JSX {
607607
form?: string | undefined
608608
height?: number | string | undefined
609609
name?: string | undefined
610-
type?: string | undefined
610+
type?: StringLiteralUnion<BaseMime> | undefined
611611
usemap?: string | undefined
612612
width?: number | string | undefined
613613
}
@@ -658,7 +658,10 @@ export namespace JSX {
658658
nomodule?: boolean | undefined
659659
referrerpolicy?: HTMLAttributeReferrerPolicy | undefined
660660
src?: string | undefined
661-
type?: string | undefined
661+
/**
662+
* @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script/type
663+
*/
664+
type?: StringLiteralUnion<'' | 'text/javascript' | 'importmap' | 'module'> | undefined
662665

663666
// React 19 compatibility
664667
crossOrigin?: CrossOrigin
@@ -681,20 +684,24 @@ export namespace JSX {
681684
value?: string | ReadonlyArray<string> | number | undefined
682685
}
683686

687+
type MediaMime = BaseMime & (`image/${string}` | `audio/${string}` | `video/${string}`)
684688
interface SourceHTMLAttributes extends HTMLAttributes {
685689
height?: number | string | undefined
686690
media?: string | undefined
687691
sizes?: string | undefined
688692
src?: string | undefined
689693
srcset?: string | undefined
690-
type?: string | undefined
694+
type?: StringLiteralUnion<MediaMime> | undefined
691695
width?: number | string | undefined
692696
}
693697

694698
interface StyleHTMLAttributes extends HTMLAttributes {
695699
media?: string | undefined
696700
scoped?: boolean | undefined
697-
type?: string | undefined
701+
/**
702+
* @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/style#type
703+
*/
704+
type?: '' | 'text/css' | undefined
698705

699706
// React 19 compatibility
700707
href?: string | undefined

0 commit comments

Comments
 (0)