diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index 21ea8c7347ebc..e962997ee02e5 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -23529,7 +23529,7 @@ namespace ts {
for (const right of getPropertiesOfType(type)) {
const left = props.get(right.escapedName);
const rightType = getTypeOfSymbol(right);
- if (left && !maybeTypeOfKind(rightType, TypeFlags.Nullable) && !(maybeTypeOfKind(rightType, TypeFlags.Any) && right.flags & SymbolFlags.Optional)) {
+ if (left && !maybeTypeOfKind(rightType, TypeFlags.Nullable) && !(maybeTypeOfKind(rightType, TypeFlags.AnyOrUnknown) && right.flags & SymbolFlags.Optional)) {
const diagnostic = error(left.valueDeclaration, Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten, unescapeLeadingUnderscores(left.escapedName));
addRelatedInfo(diagnostic, createDiagnosticForNode(spread, Diagnostics.This_spread_always_overwrites_this_property));
}
diff --git a/tests/baselines/reference/jsxPartialSpread.js b/tests/baselines/reference/jsxPartialSpread.js
new file mode 100644
index 0000000000000..e37b12f7d7a4f
--- /dev/null
+++ b/tests/baselines/reference/jsxPartialSpread.js
@@ -0,0 +1,26 @@
+//// [jsxPartialSpread.tsx]
+///
+const Select = (p: {value?: unknown}) =>
;
+import React from 'react';
+
+export function Repro({ SelectProps = {} }: { SelectProps?: Partial[0]> }) {
+ return (
+
+ );
+}
+
+//// [jsxPartialSpread.jsx]
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+exports.__esModule = true;
+exports.Repro = void 0;
+///
+var Select = function (p) { return ; };
+var react_1 = __importDefault(require("react"));
+function Repro(_a) {
+ var _b = _a.SelectProps, SelectProps = _b === void 0 ? {} : _b;
+ return ();
+}
+exports.Repro = Repro;
diff --git a/tests/baselines/reference/jsxPartialSpread.symbols b/tests/baselines/reference/jsxPartialSpread.symbols
new file mode 100644
index 0000000000000..7b0a171064992
--- /dev/null
+++ b/tests/baselines/reference/jsxPartialSpread.symbols
@@ -0,0 +1,28 @@
+=== tests/cases/compiler/jsxPartialSpread.tsx ===
+///
+const Select = (p: {value?: unknown}) => ;
+>Select : Symbol(Select, Decl(jsxPartialSpread.tsx, 1, 5))
+>p : Symbol(p, Decl(jsxPartialSpread.tsx, 1, 16))
+>value : Symbol(value, Decl(jsxPartialSpread.tsx, 1, 20))
+>p : Symbol(JSX.IntrinsicElements.p, Decl(react16.d.ts, 2467, 102))
+>p : Symbol(JSX.IntrinsicElements.p, Decl(react16.d.ts, 2467, 102))
+
+import React from 'react';
+>React : Symbol(React, Decl(jsxPartialSpread.tsx, 2, 6))
+
+export function Repro({ SelectProps = {} }: { SelectProps?: Partial[0]> }) {
+>Repro : Symbol(Repro, Decl(jsxPartialSpread.tsx, 2, 26))
+>SelectProps : Symbol(SelectProps, Decl(jsxPartialSpread.tsx, 4, 23))
+>SelectProps : Symbol(SelectProps, Decl(jsxPartialSpread.tsx, 4, 45))
+>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --))
+>Parameters : Symbol(Parameters, Decl(lib.es5.d.ts, --, --))
+>Select : Symbol(Select, Decl(jsxPartialSpread.tsx, 1, 5))
+
+ return (
+
+>Select : Symbol(Select, Decl(jsxPartialSpread.tsx, 1, 5))
+>value : Symbol(value, Decl(jsxPartialSpread.tsx, 6, 15))
+>SelectProps : Symbol(SelectProps, Decl(jsxPartialSpread.tsx, 4, 23))
+
+ );
+}
diff --git a/tests/baselines/reference/jsxPartialSpread.types b/tests/baselines/reference/jsxPartialSpread.types
new file mode 100644
index 0000000000000..ec5fd0031cc4e
--- /dev/null
+++ b/tests/baselines/reference/jsxPartialSpread.types
@@ -0,0 +1,33 @@
+=== tests/cases/compiler/jsxPartialSpread.tsx ===
+///
+const Select = (p: {value?: unknown}) => ;
+>Select : (p: { value?: unknown;}) => JSX.Element
+>(p: {value?: unknown}) => : (p: { value?: unknown;}) => JSX.Element
+>p : { value?: unknown; }
+>value : unknown
+> : JSX.Element
+>p : { value?: unknown; }
+>p : { value?: unknown; }
+
+import React from 'react';
+>React : typeof React
+
+export function Repro({ SelectProps = {} }: { SelectProps?: Partial[0]> }) {
+>Repro : ({ SelectProps }: { SelectProps?: Partial[0]>;}) => JSX.Element
+>SelectProps : Partial<{ value?: unknown; }>
+>{} : {}
+>SelectProps : Partial<{ value?: unknown; }> | undefined
+>Select : (p: { value?: unknown; }) => JSX.Element
+
+ return (
+>( ) : JSX.Element
+
+
+> : JSX.Element
+>Select : (p: { value?: unknown; }) => JSX.Element
+>value : string
+>'test' : "test"
+>SelectProps : Partial<{ value?: unknown; }>
+
+ );
+}
diff --git a/tests/cases/compiler/jsxPartialSpread.tsx b/tests/cases/compiler/jsxPartialSpread.tsx
new file mode 100644
index 0000000000000..b71ee00e5d928
--- /dev/null
+++ b/tests/cases/compiler/jsxPartialSpread.tsx
@@ -0,0 +1,12 @@
+// @jsx: preserve
+// @esModuleInterop: true
+// @strict: true
+///
+const Select = (p: {value?: unknown}) => ;
+import React from 'react';
+
+export function Repro({ SelectProps = {} }: { SelectProps?: Partial[0]> }) {
+ return (
+
+ );
+}
\ No newline at end of file