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 17function func1(a: number): void { 18 19} 20func1(5); 21 22function func2(a: number): number { 23 return a; 24} 25 26type callAbleObj1 = { 27 (a: number): number 28} 29 30function func3(fn: callAbleObj1): number { 31 return fn(5); 32} 33 34var obj1: callAbleObj1; 35func1(func2(func3(obj1))); 36 37function func4(a: number): number { 38 a++; 39 return a < 0 ? func4(a) : a; 40} 41 42func4(-5); 43func4(0); 44 45function func5(a: number, b: string, ...c) { 46 return 5; 47} 48 49func5(1, "foo"); 50func5(1, "foo", 2, true, {}); 51 52function func6(a: any, b?: string[], ...c: number[]) { 53 return true; 54} 55 56func6(2); 57func6(false, ["foo"]); 58func6({}, ["foo"], 2, 3, 4); 59 60var func7: { (a: number, b: string): number, (...a): string }; 61var b: string = func7(); 62var c: string = func7(1); 63var d: number = func7(1, "foo"); 64 65var func8: { (a?: number, ...c): boolean, (a: any, b: string[], ...c: number[]): string, (a: number, b: boolean): number }; 66var e: boolean = func8(); 67var f: boolean = func8(1); 68var g: boolean = func8(2, true); 69var h: boolean = func8(2, ["foo", "bar"], {}); 70var i: string = func8({}, ["bar"]); 71var j: string = func8({}, ["bar"], 3, 4, 5); 72 73function func9(a: number, b: string): number; 74function func9(a: string, b: number): number | string; 75function func9(a: number | string, b?: number | string): number | string | boolean { 76 return true; 77} 78 79var k: number = func9(1, "foo"); 80var l: number | string = func9("bar", 2); 81 82function func10(a: { x: number, y: string }): number[]; 83function func10(a: { x: string, y: number }): number[]; 84function func10(a: { x: number | string }) { 85 return [1, 2, 3]; 86} 87 88var m: number[] = func10({ x: 1, y: "foo" }); 89var m: number[] = func10({ x: "bar", y: 2 }); 90