* Copyright (c) 2022-2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
function func1(a: number): void {
}
func1(5);
function func2(a: number): number {
return a;
}
type callAbleObj1 = {
(a: number): number
}
function func3(fn: callAbleObj1): number {
return fn(5);
}
var obj1: callAbleObj1;
func1(func2(func3(obj1)));
function func4(a: number): number {
a++;
return a < 0 ? func4(a) : a;
}
func4(-5);
func4(0);
function func5(a: number, b: string, ...c) {
return 5;
}
func5(1, "foo");
func5(1, "foo", 2, true, {});
function func6(a: any, b?: string[], ...c: number[]) {
return true;
}
func6(2);
func6(false, ["foo"]);
func6({}, ["foo"], 2, 3, 4);
var func7: { (a: number, b: string): number, (...a): string };
var b: string = func7();
var c: string = func7(1);
var d: number = func7(1, "foo");
var func8: { (a?: number, ...c): boolean, (a: any, b: string[], ...c: number[]): string, (a: number, b: boolean): number };
var e: boolean = func8();
var f: boolean = func8(1);
var g: boolean = func8(2, true);
var h: boolean = func8(2, ["foo", "bar"], {});
var i: string = func8({}, ["bar"]);
var j: string = func8({}, ["bar"], 3, 4, 5);
function func9(a: number, b: string): number;
function func9(a: string, b: number): number | string;
function func9(a: number | string, b?: number | string): number | string | boolean {
return true;
}
var k: number = func9(1, "foo");
var l: number | string = func9("bar", 2);
function func10(a: { x: number, y: string }): number[];
function func10(a: { x: string, y: number }): number[];
function func10(a: { x: number | string }) {
return [1, 2, 3];
}
var m: number[] = func10({ x: 1, y: "foo" });
var m: number[] = func10({ x: "bar", y: 2 });