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