1/* 2 * Copyright (c) 2022-2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 17var a: any; 18var a: any; 19 20var b: number; 21var b: number; 22 23var c: number | string; 24var c: string | number; 25 26var d: { a: number, b: string }; 27var d: { b: string, a: number }; 28 29var e: (a: number, b: (string | number)[]) => void; 30var e: (a: number, b: (string | number)[]) => void; 31 32var f: { a: number, b: string } | { a: number[], b?: string }; 33var f: { a: number, b: string } | { a: number[], b?: string }; 34 35interface interface1 { 36 a: number, 37 b: string, 38} 39 40interface interface2 { 41 a: number, 42 b: string, 43} 44 45var g: interface1; 46var g: interface2; 47 48interface interface3 extends interface1 { 49 c: boolean, 50} 51 52interface interface4 extends interface2 { 53 c: boolean, 54} 55 56var h: interface3; 57var h: interface4; 58 59interface interface5 { 60 (a: number, b: string): number, 61 (a: number, b: string): string, 62 new(a: number[], b: { a: number, b: string }): boolean, 63 new(a: number[], b: { a: number, b: string }): void, 64} 65 66interface interface6 { 67 (a: number, b: string): number, 68 (a: number, b: string): string, 69 new(a: number[], b: { a: number, b: string }): void, 70 new(a: number[], b: { a: number, b: string }): boolean, 71} 72 73var i: interface5; 74var i: interface6; 75 76var j = function (a: interface6, b: number[]): number { 77 return 123; 78} 79var j: (a: interface6, b: number[]) => number; 80 81var obj = { a: 1, b: 2, c: 3 }; 82var k = { d: "foo", e: "bar", ...obj }; 83var k: { a: number, b: number, c: number, d: string, e: string }; 84 85function func1(a: number, b: string): "foo" { 86 return "foo"; 87} 88function func2(a: string, b: number): true { 89 return true; 90} 91var l: typeof func1 | typeof func2; 92var l: ((a: number, b: string) => "foo") | ((a: string, b: number) => true) 93 94var m: [a: number, b: string, c: boolean]; 95var m: [number, string, boolean]; 96 97var n: number[] | [1, 2, 3]; 98var n: [1, 2, 3] | number[]; 99 100interface interface7 { 101 a: number, 102} 103 104interface interface8 extends interface7 { 105 a: number, 106} 107 108interface interface9 { 109 a: number; 110} 111 112var o: interface9; 113var o: interface8; 114 115var p: { a: number, b: string }; 116var p: typeof p; 117