Skip to content

Commit 29a30e0

Browse files
committed
fix: Ensure attributes w/ never roles can be constructed
1 parent 6a6f672 commit 29a30e0

File tree

2 files changed

+25
-20
lines changed

2 files changed

+25
-20
lines changed

Diff for: src/jsx.d.ts

+20-20
Original file line numberDiff line numberDiff line change
@@ -1609,7 +1609,7 @@ export namespace JSXInternal {
16091609
interface BaseHTMLAttributes<T extends EventTarget = HTMLBaseElement>
16101610
extends HTMLAttributes<T> {
16111611
href?: Signalish<string | undefined>;
1612-
role: never;
1612+
role?: never;
16131613
target?: Signalish<string | undefined>;
16141614
}
16151615

@@ -1682,14 +1682,14 @@ export namespace JSXInternal {
16821682

16831683
interface ColHTMLAttributes<T extends EventTarget = HTMLTableColElement>
16841684
extends HTMLAttributes<T> {
1685-
role: never;
1685+
role?: never;
16861686
span?: Signalish<number | undefined>;
16871687
width?: Signalish<number | string | undefined>;
16881688
}
16891689

16901690
interface ColgroupHTMLAttributes<T extends EventTarget = HTMLTableColElement>
16911691
extends HTMLAttributes<T> {
1692-
role: never;
1692+
role?: never;
16931693
span?: Signalish<number | undefined>;
16941694
}
16951695

@@ -1705,7 +1705,7 @@ export namespace JSXInternal {
17051705

17061706
interface DdHTMLAttributes<T extends EventTarget = HTMLElement>
17071707
extends HTMLAttributes<T> {
1708-
role: never;
1708+
role?: never;
17091709
}
17101710

17111711
interface DelHTMLAttributes<T extends EventTarget = HTMLModElement>
@@ -1806,7 +1806,7 @@ export namespace JSXInternal {
18061806

18071807
interface HeadHTMLAttributes<T extends EventTarget = HTMLHeadElement>
18081808
extends HTMLAttributes<T> {
1809-
role: never;
1809+
role?: never;
18101810
}
18111811

18121812
interface HeaderHTMLAttributes<T extends EventTarget = HTMLElement>
@@ -1984,12 +1984,12 @@ export namespace JSXInternal {
19841984
for?: Signalish<string | undefined>;
19851985
form?: Signalish<string | undefined>;
19861986
htmlFor?: Signalish<string | undefined>;
1987-
role: never;
1987+
role?: never;
19881988
}
19891989

19901990
interface LegendHTMLAttributes<T extends EventTarget = HTMLLegendElement>
19911991
extends HTMLAttributes<T> {
1992-
role: never;
1992+
role?: never;
19931993
}
19941994

19951995
interface LiHTMLAttributes<T extends EventTarget = HTMLLIElement>
@@ -2012,7 +2012,7 @@ export namespace JSXInternal {
20122012
referrerpolicy?: Signalish<HTMLAttributeReferrerPolicy | undefined>;
20132013
referrerPolicy?: HTMLAttributeReferrerPolicy | undefined;
20142014
rel?: Signalish<string | undefined>;
2015-
role: never;
2015+
role?: never;
20162016
sizes?: Signalish<string | undefined>;
20172017
type?: Signalish<string | undefined>;
20182018
charset?: Signalish<string | undefined>;
@@ -2027,7 +2027,7 @@ export namespace JSXInternal {
20272027
interface MapHTMLAttributes<T extends EventTarget = HTMLMapElement>
20282028
extends HTMLAttributes<T> {
20292029
name?: Signalish<string | undefined>;
2030-
role: never;
2030+
role?: never;
20312031
}
20322032

20332033
interface MarqueeHTMLAttributes<T extends EventTarget = HTMLMarqueeElement>
@@ -2089,7 +2089,7 @@ export namespace JSXInternal {
20892089
httpEquiv?: Signalish<string | undefined>;
20902090
name?: Signalish<string | undefined>;
20912091
media?: Signalish<string | undefined>;
2092-
role: never;
2092+
role?: never;
20932093
}
20942094

20952095
interface MeterHTMLAttributes<T extends EventTarget = HTMLMeterElement>
@@ -2119,7 +2119,7 @@ export namespace JSXInternal {
21192119

21202120
interface NoScriptHTMLAttributes<T extends EventTarget = HTMLElement>
21212121
extends HTMLAttributes<T> {
2122-
role: never;
2122+
role?: never;
21232123
}
21242124

21252125
interface ObjectHTMLAttributes<T extends EventTarget = HTMLObjectElement>
@@ -2185,13 +2185,13 @@ export namespace JSXInternal {
21852185
interface ParamHTMLAttributes<T extends EventTarget = HTMLParamElement>
21862186
extends HTMLAttributes<T> {
21872187
name?: Signalish<string | undefined>;
2188-
role: never;
2188+
role?: never;
21892189
value?: Signalish<string | number | undefined>;
21902190
}
21912191

21922192
interface PictureHTMLAttributes<T extends EventTarget = HTMLPictureElement>
21932193
extends HTMLAttributes<T> {
2194-
role: never;
2194+
role?: never;
21952195
}
21962196

21972197
interface ProgressHTMLAttributes<T extends EventTarget = HTMLProgressElement>
@@ -2221,7 +2221,7 @@ export namespace JSXInternal {
22212221
noModule?: Signalish<boolean | undefined>;
22222222
referrerpolicy?: Signalish<HTMLAttributeReferrerPolicy | undefined>;
22232223
referrerPolicy?: HTMLAttributeReferrerPolicy | undefined;
2224-
role: never;
2224+
role?: never;
22252225
src?: Signalish<string | undefined>;
22262226
type?: Signalish<string | undefined>;
22272227
}
@@ -2257,14 +2257,14 @@ export namespace JSXInternal {
22572257
interface SlotHTMLAttributes<T extends EventTarget = HTMLSlotElement>
22582258
extends HTMLAttributes<T> {
22592259
name?: Signalish<string | undefined>;
2260-
role: never;
2260+
role?: never;
22612261
}
22622262

22632263
interface SourceHTMLAttributes<T extends EventTarget = HTMLSourceElement>
22642264
extends HTMLAttributes<T> {
22652265
height?: Signalish<number | string | undefined>;
22662266
media?: Signalish<string | undefined>;
2267-
role: never;
2267+
role?: never;
22682268
sizes?: Signalish<string | undefined>;
22692269
src?: Signalish<string | undefined>;
22702270
srcset?: Signalish<string | undefined>;
@@ -2276,7 +2276,7 @@ export namespace JSXInternal {
22762276
interface StyleHTMLAttributes<T extends EventTarget = HTMLStyleElement>
22772277
extends HTMLAttributes<T> {
22782278
media?: Signalish<string | undefined>;
2279-
role: never;
2279+
role?: never;
22802280
scoped?: Signalish<boolean | undefined>;
22812281
type?: Signalish<string | undefined>;
22822282
}
@@ -2308,7 +2308,7 @@ export namespace JSXInternal {
23082308

23092309
interface TemplateHTMLAttributes<T extends EventTarget = HTMLTemplateElement>
23102310
extends HTMLAttributes<T> {
2311-
role: never;
2311+
role?: never;
23122312
}
23132313

23142314
interface TextareaHTMLAttributes<T extends EventTarget = HTMLTextAreaElement>
@@ -2357,15 +2357,15 @@ export namespace JSXInternal {
23572357

23582358
interface TitleHTMLAttributes<T extends EventTarget = HTMLTitleElement>
23592359
extends HTMLAttributes<T> {
2360-
role: never;
2360+
role?: never;
23612361
}
23622362

23632363
interface TrackHTMLAttributes<T extends EventTarget = HTMLTrackElement>
23642364
extends MediaHTMLAttributes<T> {
23652365
default?: Signalish<boolean | undefined>;
23662366
kind?: Signalish<string | undefined>;
23672367
label?: Signalish<string | undefined>;
2368-
role: never;
2368+
role?: never;
23692369
srclang?: Signalish<string | undefined>;
23702370
srcLang?: Signalish<string | undefined>;
23712371
}

Diff for: test/ts/dom-attributes-test.tsx

+5
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ const signalInvalidAriaRole = (
2929
// @ts-expect-error A map should never have any role set
3030
<button role={createSignal('presentation' as const)} />
3131
)
32+
const validMissingAriaRole = <base href=""></base>
33+
const signalValidMissingAriaRole = (
34+
// @ts-expect-error A map should never have any role set
35+
<button role={createSignal('presentation' as const)} />
36+
)
3237

3338
// @ts-expect-error We should correctly type aria attributes like autocomplete
3439
const badAriaValues = <div aria-autocomplete="bad-value" />;

0 commit comments

Comments
 (0)