mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-05 16:38:05 -06:00
Include unknown in spread prop override check (#38577)
This commit is contained in:
parent
89f7797f7e
commit
7fc456f2d7
@ -23592,7 +23592,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));
|
||||
}
|
||||
|
||||
26
tests/baselines/reference/jsxPartialSpread.js
Normal file
26
tests/baselines/reference/jsxPartialSpread.js
Normal file
@ -0,0 +1,26 @@
|
||||
//// [jsxPartialSpread.tsx]
|
||||
/// <reference path="/.lib/react16.d.ts" />
|
||||
const Select = (p: {value?: unknown}) => <p></p>;
|
||||
import React from 'react';
|
||||
|
||||
export function Repro({ SelectProps = {} }: { SelectProps?: Partial<Parameters<typeof Select>[0]> }) {
|
||||
return (
|
||||
<Select value={'test'} {...SelectProps} />
|
||||
);
|
||||
}
|
||||
|
||||
//// [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;
|
||||
/// <reference path="react16.d.ts" />
|
||||
var Select = function (p) { return <p></p>; };
|
||||
var react_1 = __importDefault(require("react"));
|
||||
function Repro(_a) {
|
||||
var _b = _a.SelectProps, SelectProps = _b === void 0 ? {} : _b;
|
||||
return (<Select value={'test'} {...SelectProps}/>);
|
||||
}
|
||||
exports.Repro = Repro;
|
||||
28
tests/baselines/reference/jsxPartialSpread.symbols
Normal file
28
tests/baselines/reference/jsxPartialSpread.symbols
Normal file
@ -0,0 +1,28 @@
|
||||
=== tests/cases/compiler/jsxPartialSpread.tsx ===
|
||||
/// <reference path="react16.d.ts" />
|
||||
const Select = (p: {value?: unknown}) => <p></p>;
|
||||
>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<Parameters<typeof Select>[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 value={'test'} {...SelectProps} />
|
||||
>Select : Symbol(Select, Decl(jsxPartialSpread.tsx, 1, 5))
|
||||
>value : Symbol(value, Decl(jsxPartialSpread.tsx, 6, 15))
|
||||
>SelectProps : Symbol(SelectProps, Decl(jsxPartialSpread.tsx, 4, 23))
|
||||
|
||||
);
|
||||
}
|
||||
33
tests/baselines/reference/jsxPartialSpread.types
Normal file
33
tests/baselines/reference/jsxPartialSpread.types
Normal file
@ -0,0 +1,33 @@
|
||||
=== tests/cases/compiler/jsxPartialSpread.tsx ===
|
||||
/// <reference path="react16.d.ts" />
|
||||
const Select = (p: {value?: unknown}) => <p></p>;
|
||||
>Select : (p: { value?: unknown;}) => JSX.Element
|
||||
>(p: {value?: unknown}) => <p></p> : (p: { value?: unknown;}) => JSX.Element
|
||||
>p : { value?: unknown; }
|
||||
>value : unknown
|
||||
><p></p> : JSX.Element
|
||||
>p : { value?: unknown; }
|
||||
>p : { value?: unknown; }
|
||||
|
||||
import React from 'react';
|
||||
>React : typeof React
|
||||
|
||||
export function Repro({ SelectProps = {} }: { SelectProps?: Partial<Parameters<typeof Select>[0]> }) {
|
||||
>Repro : ({ SelectProps }: { SelectProps?: Partial<Parameters<typeof Select>[0]>;}) => JSX.Element
|
||||
>SelectProps : Partial<{ value?: unknown; }>
|
||||
>{} : {}
|
||||
>SelectProps : Partial<{ value?: unknown; }> | undefined
|
||||
>Select : (p: { value?: unknown; }) => JSX.Element
|
||||
|
||||
return (
|
||||
>( <Select value={'test'} {...SelectProps} /> ) : JSX.Element
|
||||
|
||||
<Select value={'test'} {...SelectProps} />
|
||||
><Select value={'test'} {...SelectProps} /> : JSX.Element
|
||||
>Select : (p: { value?: unknown; }) => JSX.Element
|
||||
>value : string
|
||||
>'test' : "test"
|
||||
>SelectProps : Partial<{ value?: unknown; }>
|
||||
|
||||
);
|
||||
}
|
||||
12
tests/cases/compiler/jsxPartialSpread.tsx
Normal file
12
tests/cases/compiler/jsxPartialSpread.tsx
Normal file
@ -0,0 +1,12 @@
|
||||
// @jsx: preserve
|
||||
// @esModuleInterop: true
|
||||
// @strict: true
|
||||
/// <reference path="/.lib/react16.d.ts" />
|
||||
const Select = (p: {value?: unknown}) => <p></p>;
|
||||
import React from 'react';
|
||||
|
||||
export function Repro({ SelectProps = {} }: { SelectProps?: Partial<Parameters<typeof Select>[0]> }) {
|
||||
return (
|
||||
<Select value={'test'} {...SelectProps} />
|
||||
);
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user