• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#  It is possible to spread only arrays or classes derived from arrays into the rest parameter or array literals
2
3Rule ``arkts-no-spread``
4
5**Severity: error**
6
7The only supported scenario for the spread operator is to spread an array or
8class derived from array into the rest parameter or array literal.
9Otherwise, manually "unpack" data from arrays and objects, where necessary.
10All typed arrays from the standard library (for example, ``Int32Array``)
11are also supported.
12
13
14## TypeScript
15
16
17```
18
19    function foo(x : number, y : number, z : number) {
20        console.log(x, y, z)
21    }
22
23    let args : [number, number, number] = [0, 1, 2]
24    foo(...args)
25
26    let list1 = [1, 2]
27    let list2 = [...list1, 3, 4]
28
29    let point2d = {x: 1, y: 2}
30    let point3d = {...point2d, z: 3}
31
32```
33
34## ArkTS
35
36
37```
38
39    function sum_numbers(...numbers: number[]): number {
40        let res = 0
41        for (let n of numbers)
42            res += n
43        return res
44    }
45    console.log(sum_numbers(1, 2, 3))
46
47    function log_numbers(x : number, y : number, z : number) {
48        console.log(x, y, z)
49    }
50    let numbers: number[] = [1, 2, 3]
51    log_numbers(numbers[0], numbers[1], numbers[2])
52
53    let list1 : number[] = [1, 2]
54    let list2 : number[] = [list1[0], list1[1], 3, 4]
55
56    class Point2D {
57        x: number = 0; y: number = 0
58    }
59
60    class Point3D {
61        x: number = 0; y: number = 0; z: number = 0
62        constructor(p2d: Point2D, z: number) {
63            this.x = p2d.x
64            this.y = p2d.y
65            this.z = z
66        }
67    }
68
69    let p3d = new Point3D({x: 1, y: 2} as Point2D, 3)
70    console.log(p3d.x, p3d.y, p3d.z)
71
72    class DerivedFromArray extends Uint16Array {};
73
74    let arr1 = [1, 2, 3];
75    let arr2 = new Uint16Array([4, 5, 6]);
76    let arr3 = new DerivedFromArray([7, 8, 9])
77    let arr4 = [...arr1, 10, ...arr2, 11, ...arr3]
78
79```
80
81
82