/* * Copyright (c) 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. */ class C { constructor (p: T) { this.v = p; } v : T; } type Alias1Function = (p : T) => double; type Alias2Function = (p : double) => T; type Alias3Function = (p : Int) => T[]; type Alias4Function = (p : T[], q: T) => double; type Alias5Function = (p : T1[], q: T2) => double; type Alias6Function = (p : T1, q: T2) => R; type Alias7Function = (p : (p1 : C) => double, q : double) => double; function main() { let v1 : (p : double) => double = (p : double) : double => { return p; }; // (p:Double) => Double assert(v1(1) == 1); let v2 : Alias1Function = (p : double) : double => { return p; }; // (p:Double) => Double assert(v2(2) == 2); let v3 : Alias2Function = (p : double) : double => { return p; }; // (p:Double) => Double assert(v3(3) == 3); let v4 : Alias3Function = (p : Int) : double[] => { return [p]; }; // (p:Double) => double[] assert(v4(4)[0] == 4); // let v5 : Alias4Function = (p : double[], q: double) : double => { return p[0]; }; // (p: Double[], q: Double) => Double // assert(v5([5.0], 6) == 5); let v6 : Alias5Function = (p : double[], q: double) : double => { return p[0]; }; // (p: double[], q: Double) => Double assert(v6([7.0], 8) == 7.0); let v7 : Alias6Function = (p: double, q: double) : double => { return p + q; }; // (p: Double, q: Double) => Double assert(v7(9, 10) == 19); let v9 : Alias7Function = (p : (p1 : C) => double, q: double) : double => { return p(new C(q)); }; // (p : (p1 : C Double, Double) : Double assert(v9((p : C) : double => { return p.v;}, 20) == 20); }