Skip to content

Commit 622c206

Browse files
authored
Ignore data- props when excess property checking (#36952) (#37031)
1 parent c6866c1 commit 622c206

File tree

5 files changed

+96
-1
lines changed

5 files changed

+96
-1
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15258,7 +15258,7 @@ namespace ts {
1525815258
checkTypes = reducedTarget.flags & TypeFlags.Union ? (<UnionType>reducedTarget).types : [reducedTarget];
1525915259
}
1526015260
for (const prop of getPropertiesOfType(source)) {
15261-
if (shouldCheckAsExcessProperty(prop, source.symbol)) {
15261+
if (shouldCheckAsExcessProperty(prop, source.symbol) && !isIgnoredJsxProperty(source, prop)) {
1526215262
if (!isKnownProperty(reducedTarget, prop.escapedName, isComparingJsxAttributes)) {
1526315263
if (reportErrors) {
1526415264
// Report error in terms of object types in the target as those are the only ones
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//// [tsxUnionMemberChecksFilterDataProps.tsx]
2+
/// <reference path="/.lib/react16.d.ts" />
3+
import React, { ReactElement } from "react";
4+
5+
declare function NotHappy(props: ({ fixed?: boolean } | { value?: number })): ReactElement<any>;
6+
declare function Happy(props: { fixed?: boolean, value?: number }): ReactElement<any>;
7+
8+
const RootNotHappy = () => (<NotHappy data-testid="my-test-id" />);
9+
const RootHappy = () => (<Happy data-testid="my-test-id" />);
10+
11+
12+
//// [tsxUnionMemberChecksFilterDataProps.js]
13+
"use strict";
14+
var __importDefault = (this && this.__importDefault) || function (mod) {
15+
return (mod && mod.__esModule) ? mod : { "default": mod };
16+
};
17+
exports.__esModule = true;
18+
/// <reference path="react16.d.ts" />
19+
var react_1 = __importDefault(require("react"));
20+
var RootNotHappy = function () { return (react_1["default"].createElement(NotHappy, { "data-testid": "my-test-id" })); };
21+
var RootHappy = function () { return (react_1["default"].createElement(Happy, { "data-testid": "my-test-id" })); };
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
=== tests/cases/compiler/tsxUnionMemberChecksFilterDataProps.tsx ===
2+
/// <reference path="react16.d.ts" />
3+
import React, { ReactElement } from "react";
4+
>React : Symbol(React, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 1, 6))
5+
>ReactElement : Symbol(ReactElement, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 1, 15))
6+
7+
declare function NotHappy(props: ({ fixed?: boolean } | { value?: number })): ReactElement<any>;
8+
>NotHappy : Symbol(NotHappy, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 1, 44))
9+
>props : Symbol(props, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 3, 26))
10+
>fixed : Symbol(fixed, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 3, 35))
11+
>value : Symbol(value, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 3, 57))
12+
>ReactElement : Symbol(ReactElement, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 1, 15))
13+
14+
declare function Happy(props: { fixed?: boolean, value?: number }): ReactElement<any>;
15+
>Happy : Symbol(Happy, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 3, 96))
16+
>props : Symbol(props, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 4, 23))
17+
>fixed : Symbol(fixed, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 4, 31))
18+
>value : Symbol(value, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 4, 48))
19+
>ReactElement : Symbol(ReactElement, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 1, 15))
20+
21+
const RootNotHappy = () => (<NotHappy data-testid="my-test-id" />);
22+
>RootNotHappy : Symbol(RootNotHappy, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 6, 5))
23+
>NotHappy : Symbol(NotHappy, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 1, 44))
24+
>data-testid : Symbol(data-testid, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 6, 37))
25+
26+
const RootHappy = () => (<Happy data-testid="my-test-id" />);
27+
>RootHappy : Symbol(RootHappy, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 7, 5))
28+
>Happy : Symbol(Happy, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 3, 96))
29+
>data-testid : Symbol(data-testid, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 7, 31))
30+
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
=== tests/cases/compiler/tsxUnionMemberChecksFilterDataProps.tsx ===
2+
/// <reference path="react16.d.ts" />
3+
import React, { ReactElement } from "react";
4+
>React : typeof React
5+
>ReactElement : any
6+
7+
declare function NotHappy(props: ({ fixed?: boolean } | { value?: number })): ReactElement<any>;
8+
>NotHappy : (props: { fixed?: boolean; } | { value?: number; }) => React.ReactElement<any>
9+
>props : { fixed?: boolean; } | { value?: number; }
10+
>fixed : boolean
11+
>value : number
12+
13+
declare function Happy(props: { fixed?: boolean, value?: number }): ReactElement<any>;
14+
>Happy : (props: { fixed?: boolean; value?: number; }) => React.ReactElement<any>
15+
>props : { fixed?: boolean; value?: number; }
16+
>fixed : boolean
17+
>value : number
18+
19+
const RootNotHappy = () => (<NotHappy data-testid="my-test-id" />);
20+
>RootNotHappy : () => JSX.Element
21+
>() => (<NotHappy data-testid="my-test-id" />) : () => JSX.Element
22+
>(<NotHappy data-testid="my-test-id" />) : JSX.Element
23+
><NotHappy data-testid="my-test-id" /> : JSX.Element
24+
>NotHappy : (props: { fixed?: boolean; } | { value?: number; }) => React.ReactElement<any>
25+
>data-testid : string
26+
27+
const RootHappy = () => (<Happy data-testid="my-test-id" />);
28+
>RootHappy : () => JSX.Element
29+
>() => (<Happy data-testid="my-test-id" />) : () => JSX.Element
30+
>(<Happy data-testid="my-test-id" />) : JSX.Element
31+
><Happy data-testid="my-test-id" /> : JSX.Element
32+
>Happy : (props: { fixed?: boolean; value?: number; }) => React.ReactElement<any>
33+
>data-testid : string
34+
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// @jsx: react
2+
// @esModuleInterop: true
3+
/// <reference path="/.lib/react16.d.ts" />
4+
import React, { ReactElement } from "react";
5+
6+
declare function NotHappy(props: ({ fixed?: boolean } | { value?: number })): ReactElement<any>;
7+
declare function Happy(props: { fixed?: boolean, value?: number }): ReactElement<any>;
8+
9+
const RootNotHappy = () => (<NotHappy data-testid="my-test-id" />);
10+
const RootHappy = () => (<Happy data-testid="my-test-id" />);

0 commit comments

Comments
 (0)