1/* 2 * Copyright (c) 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 16class C<T> { 17 constructor (p: T) { this.v = p; } 18 v: T; 19 } 20 21type Alias1Tuple<T> = [T]; 22type Alias2Tuple<T> = [T, Int]; 23type Alias3Tuple<T> = [C<T>, double]; 24type Alias4Tuple<T1, T2> = [T1[], T2]; 25type Alias5Tuple<T1, T2> = [C<T1>[], T2]; 26type Alias6Tuple<T1, T2> = [(p: T1) => double, T2]; 27 28 29function main() { 30 let v1: [double] = [new Int(1)]; // [double] 31 let v2: [double, Int] = [new Double(2), new Int(3)]; // [Double, Int] 32 33 let v3: Alias1Tuple<double> = [new Int(4)]; // [double] 34 let v4: Alias2Tuple<double> = [new Double(5), new Int(6)]; // [Double, Int] 35 36 let v5: Alias3Tuple<double> = [new C<double>(7), 8]; // [C<Double>, Double] 37 assert(v5[0].v == 7); 38 assert(v5[1] == 8); 39 40 let v6: Alias4Tuple<double, double> = [[new Int(9), new Int(10), new Int(11)], 12]; // [double[], Double] 41 assert(v6[0][0] == 9); 42 assert(v6[0][1] == 10); 43 assert(v6[0][2] == 11); 44 assert(v6[1] == 12); 45 46 let v7: Alias5Tuple<double, double> = [[new C<double>(13)], 14]; // [C<Double>[], Double] 47 assert(v7[0][0].v == 13); 48 assert(v7[1] == 14); 49 50 let v9: Alias6Tuple<double, double> = [(p: double) : double => { return p;}, 16]; // [(p: Double) => Double, Double] 51 assert(v9[0](15) == 15); 52 assert(v9[1] == 16); 53} 54