• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2* Copyright (c) Microsoft Corporation. All rights reserved.
3* Copyright (c) 2023 Huawei Device Co., Ltd.
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8*     http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*
16* This file has been modified by Huawei to verify type inference by adding verification statements.
17*/
18
19// === tests/cases/conformance/types/rest/objectRestAssignment.ts ===
20declare function AssertType(value:any, type:string):void;
21let ka: any;
22AssertType(ka, "any");
23
24let nested: { ki };
25AssertType(nested, "{ ki: any; }");
26AssertType(ki, "any");
27
28let other: number;
29AssertType(other, "number");
30
31let rest: { };
32AssertType(rest, "{}");
33
34let complex: { x: { ka, ki }, y: number };
35AssertType(complex, "{ x: {    ka;    ki;}; y: number; }");
36AssertType(x, "{ ka: any; ki: any; }");
37AssertType(ka, "any");
38AssertType(ki, "any");
39AssertType(y, "number");
40
41({x: { ka, ...nested }, y: other, ...rest} = complex);
42AssertType(({x: { ka, ...nested }, y: other, ...rest} = complex), "{ x: { ka: any; ki: any; }; y: number; }");
43AssertType({x: { ka, ...nested }, y: other, ...rest} = complex, "{ x: { ka: any; ki: any; }; y: number; }");
44AssertType({x: { ka, ...nested }, y: other, ...rest}, "{ x: { ki: any; ka: any; }; y: number; }");
45AssertType(x, "{ ki: any; ka: any; }");
46AssertType({ ka, ...nested }, "{ ki: any; ka: any; }");
47AssertType(ka, "any");
48AssertType(nested, "{ ki: any; }");
49AssertType(y, "number");
50AssertType(other, "number");
51AssertType(rest, "{}");
52AssertType(complex, "{ x: { ka: any; ki: any; }; y: number; }");
53
54// should be:
55let overEmit: { a: { ka: string, x: string }[], b: { z: string, ki: string, ku: string }, ke: string, ko: string };
56AssertType(overEmit, "{ a: {    ka: string;    x: string;}[]; b: {    z: string;    ki: string;    ku: string;}; ke: string; ko: string; }");
57AssertType(a, "{ ka: string; x: string; }[]");
58AssertType(ka, "string");
59AssertType(x, "string");
60AssertType(b, "{ z: string; ki: string; ku: string; }");
61AssertType(z, "string");
62AssertType(ki, "string");
63AssertType(ku, "string");
64AssertType(ke, "string");
65AssertType(ko, "string");
66
67let { a: [{ ...nested2 }, ...y], b: { z, ...c }, ...rest2 } = overEmit;
68AssertType(a, "any");
69AssertType(nested2, "{ ka: string; x: string; }");
70AssertType(y, "{ ka: string; x: string; }[]");
71AssertType(b, "any");
72AssertType(z, "string");
73AssertType(c, "{ ki: string; ku: string; }");
74AssertType(rest2, "{ ke: string; ko: string; }");
75AssertType(overEmit, "{ a: { ka: string; x: string; }[]; b: { z: string; ki: string; ku: string; }; ke: string; ko: string; }");
76
77({ a: [{ ...nested2 }, ...y], b: { z, ...c }, ...rest2 } = overEmit);
78AssertType(({ a: [{ ...nested2 }, ...y], b: { z, ...c }, ...rest2 } = overEmit), "{ a: { ka: string; x: string; }[]; b: { z: string; ki: string; ku: string; }; ke: string; ko: string; }");
79AssertType({ a: [{ ...nested2 }, ...y], b: { z, ...c }, ...rest2 } = overEmit, "{ a: { ka: string; x: string; }[]; b: { z: string; ki: string; ku: string; }; ke: string; ko: string; }");
80AssertType({ a: [{ ...nested2 }, ...y], b: { z, ...c }, ...rest2 }, "{ ke: string; ko: string; a: [{ ka: string; x: string; }, ...{ ka: string; x: string; }[]]; b: { ki: string; ku: string; z: string; }; }");
81AssertType(a, "[{ ka: string; x: string; }, ...{ ka: string; x: string; }[]]");
82AssertType([{ ...nested2 }, ...y], "[{ ka: string; x: string; }, ...{ ka: string; x: string; }[]]");
83AssertType({ ...nested2 }, "{ ka: string; x: string; }");
84AssertType(nested2, "{ ka: string; x: string; }");
85AssertType(...y, "{ ka: string; x: string; }");
86AssertType(y, "{ ka: string; x: string; }[]");
87AssertType(b, "{ ki: string; ku: string; z: string; }");
88AssertType({ z, ...c }, "{ ki: string; ku: string; z: string; }");
89AssertType(z, "string");
90AssertType(c, "{ ki: string; ku: string; }");
91AssertType(rest2, "{ ke: string; ko: string; }");
92AssertType(overEmit, "{ a: { ka: string; x: string; }[]; b: { z: string; ki: string; ku: string; }; ke: string; ko: string; }");
93
94
95