Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15331,7 +15331,7 @@ namespace ts {
checkTypes = reducedTarget.flags & TypeFlags.Union ? (<UnionType>reducedTarget).types : [reducedTarget];
}
for (const prop of getPropertiesOfType(source)) {
if (shouldCheckAsExcessProperty(prop, source.symbol)) {
if (shouldCheckAsExcessProperty(prop, source.symbol) && !isIgnoredJsxProperty(source, prop)) {
if (!isKnownProperty(reducedTarget, prop.escapedName, isComparingJsxAttributes)) {
if (reportErrors) {
// Report error in terms of object types in the target as those are the only ones
Expand Down
21 changes: 21 additions & 0 deletions tests/baselines/reference/tsxUnionMemberChecksFilterDataProps.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
//// [tsxUnionMemberChecksFilterDataProps.tsx]
/// <reference path="/.lib/react16.d.ts" />
import React, { ReactElement } from "react";

declare function NotHappy(props: ({ fixed?: boolean } | { value?: number })): ReactElement<any>;
declare function Happy(props: { fixed?: boolean, value?: number }): ReactElement<any>;

const RootNotHappy = () => (<NotHappy data-testid="my-test-id" />);
const RootHappy = () => (<Happy data-testid="my-test-id" />);


//// [tsxUnionMemberChecksFilterDataProps.js]
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
exports.__esModule = true;
/// <reference path="react16.d.ts" />
var react_1 = __importDefault(require("react"));
var RootNotHappy = function () { return (react_1["default"].createElement(NotHappy, { "data-testid": "my-test-id" })); };
var RootHappy = function () { return (react_1["default"].createElement(Happy, { "data-testid": "my-test-id" })); };
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
=== tests/cases/compiler/tsxUnionMemberChecksFilterDataProps.tsx ===
/// <reference path="react16.d.ts" />
import React, { ReactElement } from "react";
>React : Symbol(React, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 1, 6))
>ReactElement : Symbol(ReactElement, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 1, 15))

declare function NotHappy(props: ({ fixed?: boolean } | { value?: number })): ReactElement<any>;
>NotHappy : Symbol(NotHappy, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 1, 44))
>props : Symbol(props, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 3, 26))
>fixed : Symbol(fixed, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 3, 35))
>value : Symbol(value, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 3, 57))
>ReactElement : Symbol(ReactElement, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 1, 15))

declare function Happy(props: { fixed?: boolean, value?: number }): ReactElement<any>;
>Happy : Symbol(Happy, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 3, 96))
>props : Symbol(props, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 4, 23))
>fixed : Symbol(fixed, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 4, 31))
>value : Symbol(value, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 4, 48))
>ReactElement : Symbol(ReactElement, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 1, 15))

const RootNotHappy = () => (<NotHappy data-testid="my-test-id" />);
>RootNotHappy : Symbol(RootNotHappy, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 6, 5))
>NotHappy : Symbol(NotHappy, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 1, 44))
>data-testid : Symbol(data-testid, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 6, 37))

const RootHappy = () => (<Happy data-testid="my-test-id" />);
>RootHappy : Symbol(RootHappy, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 7, 5))
>Happy : Symbol(Happy, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 3, 96))
>data-testid : Symbol(data-testid, Decl(tsxUnionMemberChecksFilterDataProps.tsx, 7, 31))

Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
=== tests/cases/compiler/tsxUnionMemberChecksFilterDataProps.tsx ===
/// <reference path="react16.d.ts" />
import React, { ReactElement } from "react";
>React : typeof React
>ReactElement : any

declare function NotHappy(props: ({ fixed?: boolean } | { value?: number })): ReactElement<any>;
>NotHappy : (props: { fixed?: boolean; } | { value?: number; }) => React.ReactElement<any>
>props : { fixed?: boolean; } | { value?: number; }
>fixed : boolean
>value : number

declare function Happy(props: { fixed?: boolean, value?: number }): ReactElement<any>;
>Happy : (props: { fixed?: boolean; value?: number; }) => React.ReactElement<any>
>props : { fixed?: boolean; value?: number; }
>fixed : boolean
>value : number

const RootNotHappy = () => (<NotHappy data-testid="my-test-id" />);
>RootNotHappy : () => JSX.Element
>() => (<NotHappy data-testid="my-test-id" />) : () => JSX.Element
>(<NotHappy data-testid="my-test-id" />) : JSX.Element
><NotHappy data-testid="my-test-id" /> : JSX.Element
>NotHappy : (props: { fixed?: boolean; } | { value?: number; }) => React.ReactElement<any>
>data-testid : string

const RootHappy = () => (<Happy data-testid="my-test-id" />);
>RootHappy : () => JSX.Element
>() => (<Happy data-testid="my-test-id" />) : () => JSX.Element
>(<Happy data-testid="my-test-id" />) : JSX.Element
><Happy data-testid="my-test-id" /> : JSX.Element
>Happy : (props: { fixed?: boolean; value?: number; }) => React.ReactElement<any>
>data-testid : string

10 changes: 10 additions & 0 deletions tests/cases/compiler/tsxUnionMemberChecksFilterDataProps.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// @jsx: react
// @esModuleInterop: true
/// <reference path="/.lib/react16.d.ts" />
import React, { ReactElement } from "react";

declare function NotHappy(props: ({ fixed?: boolean } | { value?: number })): ReactElement<any>;
declare function Happy(props: { fixed?: boolean, value?: number }): ReactElement<any>;

const RootNotHappy = () => (<NotHappy data-testid="my-test-id" />);
const RootHappy = () => (<Happy data-testid="my-test-id" />);