mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-15 12:51:30 -05:00
Merge pull request #15362 from Microsoft/contextually-type-spread-assignment
Contextually type object spread expressions
This commit is contained in:
@@ -12728,6 +12728,8 @@ namespace ts {
|
||||
case SyntaxKind.PropertyAssignment:
|
||||
case SyntaxKind.ShorthandPropertyAssignment:
|
||||
return getContextualTypeForObjectLiteralElement(<ObjectLiteralElementLike>parent);
|
||||
case SyntaxKind.SpreadAssignment:
|
||||
return getApparentTypeOfContextualType(parent.parent as ObjectLiteralExpression);
|
||||
case SyntaxKind.ArrayLiteralExpression:
|
||||
return getContextualTypeForElementExpression(node);
|
||||
case SyntaxKind.ConditionalExpression:
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
//// [contextualTypeObjectSpreadExpression.ts]
|
||||
interface I {
|
||||
a: "a";
|
||||
}
|
||||
let i: I;
|
||||
i = { ...{ a: "a" } };
|
||||
|
||||
|
||||
//// [contextualTypeObjectSpreadExpression.js]
|
||||
var __assign = (this && this.__assign) || Object.assign || function(t) {
|
||||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||
s = arguments[i];
|
||||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
||||
t[p] = s[p];
|
||||
}
|
||||
return t;
|
||||
};
|
||||
var i;
|
||||
i = __assign({ a: "a" });
|
||||
@@ -0,0 +1,15 @@
|
||||
=== tests/cases/compiler/contextualTypeObjectSpreadExpression.ts ===
|
||||
interface I {
|
||||
>I : Symbol(I, Decl(contextualTypeObjectSpreadExpression.ts, 0, 0))
|
||||
|
||||
a: "a";
|
||||
>a : Symbol(I.a, Decl(contextualTypeObjectSpreadExpression.ts, 0, 13))
|
||||
}
|
||||
let i: I;
|
||||
>i : Symbol(i, Decl(contextualTypeObjectSpreadExpression.ts, 3, 3))
|
||||
>I : Symbol(I, Decl(contextualTypeObjectSpreadExpression.ts, 0, 0))
|
||||
|
||||
i = { ...{ a: "a" } };
|
||||
>i : Symbol(i, Decl(contextualTypeObjectSpreadExpression.ts, 3, 3))
|
||||
>a : Symbol(a, Decl(contextualTypeObjectSpreadExpression.ts, 4, 10))
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
=== tests/cases/compiler/contextualTypeObjectSpreadExpression.ts ===
|
||||
interface I {
|
||||
>I : I
|
||||
|
||||
a: "a";
|
||||
>a : "a"
|
||||
}
|
||||
let i: I;
|
||||
>i : I
|
||||
>I : I
|
||||
|
||||
i = { ...{ a: "a" } };
|
||||
>i = { ...{ a: "a" } } : { a: "a"; }
|
||||
>i : I
|
||||
>{ ...{ a: "a" } } : { a: "a"; }
|
||||
>{ a: "a" } : { a: "a"; }
|
||||
>a : string
|
||||
>"a" : "a"
|
||||
|
||||
@@ -78,11 +78,11 @@ let nested: { a: number, b: boolean, c: string } =
|
||||
>c : string
|
||||
|
||||
{ ...{ a: 3, ...{ b: false, c: 'overriden' } }, c: 'whatever' }
|
||||
>{ ...{ a: 3, ...{ b: false, c: 'overriden' } }, c: 'whatever' } : { c: string; b: boolean; a: number; }
|
||||
>{ a: 3, ...{ b: false, c: 'overriden' } } : { b: boolean; c: string; a: number; }
|
||||
>{ ...{ a: 3, ...{ b: false, c: 'overriden' } }, c: 'whatever' } : { c: string; b: false; a: number; }
|
||||
>{ a: 3, ...{ b: false, c: 'overriden' } } : { b: false; c: string; a: number; }
|
||||
>a : number
|
||||
>3 : 3
|
||||
>{ b: false, c: 'overriden' } : { b: boolean; c: string; }
|
||||
>{ b: false, c: 'overriden' } : { b: false; c: string; }
|
||||
>b : boolean
|
||||
>false : false
|
||||
>c : string
|
||||
@@ -148,11 +148,11 @@ let combinedNested: { a: number, b: boolean, c: string, d: string } =
|
||||
>d : string
|
||||
|
||||
{ ...{ a: 4, ...{ b: false, c: 'overriden' } }, d: 'actually new', ...{ a: 5, d: 'maybe new' } }
|
||||
>{ ...{ a: 4, ...{ b: false, c: 'overriden' } }, d: 'actually new', ...{ a: 5, d: 'maybe new' } } : { a: number; d: string; b: boolean; c: string; }
|
||||
>{ a: 4, ...{ b: false, c: 'overriden' } } : { b: boolean; c: string; a: number; }
|
||||
>{ ...{ a: 4, ...{ b: false, c: 'overriden' } }, d: 'actually new', ...{ a: 5, d: 'maybe new' } } : { a: number; d: string; b: false; c: string; }
|
||||
>{ a: 4, ...{ b: false, c: 'overriden' } } : { b: false; c: string; a: number; }
|
||||
>a : number
|
||||
>4 : 4
|
||||
>{ b: false, c: 'overriden' } : { b: boolean; c: string; }
|
||||
>{ b: false, c: 'overriden' } : { b: false; c: string; }
|
||||
>b : boolean
|
||||
>false : false
|
||||
>c : string
|
||||
@@ -172,11 +172,11 @@ let combinedNestedChangeType: { a: number, b: boolean, c: number } =
|
||||
>c : number
|
||||
|
||||
{ ...{ a: 1, ...{ b: false, c: 'overriden' } }, c: -1 }
|
||||
>{ ...{ a: 1, ...{ b: false, c: 'overriden' } }, c: -1 } : { c: number; b: boolean; a: number; }
|
||||
>{ a: 1, ...{ b: false, c: 'overriden' } } : { b: boolean; c: string; a: number; }
|
||||
>{ ...{ a: 1, ...{ b: false, c: 'overriden' } }, c: -1 } : { c: number; b: false; a: number; }
|
||||
>{ a: 1, ...{ b: false, c: 'overriden' } } : { b: false; c: string; a: number; }
|
||||
>a : number
|
||||
>1 : 1
|
||||
>{ b: false, c: 'overriden' } : { b: boolean; c: string; }
|
||||
>{ b: false, c: 'overriden' } : { b: false; c: string; }
|
||||
>b : boolean
|
||||
>false : false
|
||||
>c : string
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
interface I {
|
||||
a: "a";
|
||||
}
|
||||
let i: I;
|
||||
i = { ...{ a: "a" } };
|
||||
Reference in New Issue
Block a user