1/*
2 * Copyright (c) 2023-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
16function foo(x : number, y : number, z : number) {
17    console.log(x, y, z)
18}
19
20let args : [number, number, number] = [0, 1, 2]
21foo(...args)
22
23let list1 = [1, 2]
24let list2 = [...list1, 3, 4]
25
26let point2d = {x: 1, y: 2}
27let point3d = {...point2d, z: 3}
28
29
30
31
32function sum_numbers(...numbers: number[]): number {
33    let res = 0
34    for (let n of numbers)
35        res += n
36    return res
37}
38console.log(sum_numbers(1, 2, 3))
39
40function log_numbers(x : number, y : number, z : number) {
41    console.log(x, y, z)
42}
43let numbers: number[] = [1, 2, 3]
44log_numbers(numbers[0], numbers[1], numbers[2])
45
46let list3 : number[] = [1, 2]
47let list4 : number[] = [list1[0], list1[1], 3, 4]
48
49class Point2D {
50    x: number = 0; y: number = 0
51}
52
53class Point3D {
54    x: number = 0; y: number = 0; z: number = 0
55    constructor(p2d: Point2D, z: number) {
56        this.x = p2d.x
57        this.y = p2d.y
58        this.z = z
59    }
60}
61
62let p3d = new Point3D({x: 1, y: 2} as Point2D, 3)
63console.log(p3d.x, p3d.y, p3d.z)
64
65class DerivedFromArray extends Uint16Array {
66};
67
68let arr1 = [1, 2, 3];
69let arr2 = new Uint16Array([4, 5, 6]);
70let arr3 = new DerivedFromArray([7, 8, 9])
71
72let arr4 = [...arr1, 10, ...arr2, 11, ...arr3]
73