13af6ab5fSopenharmony_ci# It is possible to spread only arrays or classes derived from arrays into the rest parameter or array literals 23af6ab5fSopenharmony_ci 33af6ab5fSopenharmony_ciRule ``arkts-no-spread`` 43af6ab5fSopenharmony_ci 53af6ab5fSopenharmony_ci**Severity: error** 63af6ab5fSopenharmony_ci 73af6ab5fSopenharmony_ciThe only supported scenario for the spread operator is to spread an array or 83af6ab5fSopenharmony_ciclass derived from array into the rest parameter or array literal. 93af6ab5fSopenharmony_ciOtherwise, manually "unpack" data from arrays and objects, where necessary. 103af6ab5fSopenharmony_ciAll typed arrays from the standard library (for example, ``Int32Array``) 113af6ab5fSopenharmony_ciare also supported. 123af6ab5fSopenharmony_ci 133af6ab5fSopenharmony_ci 143af6ab5fSopenharmony_ci## TypeScript 153af6ab5fSopenharmony_ci 163af6ab5fSopenharmony_ci 173af6ab5fSopenharmony_ci``` 183af6ab5fSopenharmony_ci 193af6ab5fSopenharmony_ci function foo(x : number, y : number, z : number) { 203af6ab5fSopenharmony_ci console.log(x, y, z) 213af6ab5fSopenharmony_ci } 223af6ab5fSopenharmony_ci 233af6ab5fSopenharmony_ci let args : [number, number, number] = [0, 1, 2] 243af6ab5fSopenharmony_ci foo(...args) 253af6ab5fSopenharmony_ci 263af6ab5fSopenharmony_ci let list1 = [1, 2] 273af6ab5fSopenharmony_ci let list2 = [...list1, 3, 4] 283af6ab5fSopenharmony_ci 293af6ab5fSopenharmony_ci let point2d = {x: 1, y: 2} 303af6ab5fSopenharmony_ci let point3d = {...point2d, z: 3} 313af6ab5fSopenharmony_ci 323af6ab5fSopenharmony_ci``` 333af6ab5fSopenharmony_ci 343af6ab5fSopenharmony_ci## ArkTS 353af6ab5fSopenharmony_ci 363af6ab5fSopenharmony_ci 373af6ab5fSopenharmony_ci``` 383af6ab5fSopenharmony_ci 393af6ab5fSopenharmony_ci function sum_numbers(...numbers: number[]): number { 403af6ab5fSopenharmony_ci let res = 0 413af6ab5fSopenharmony_ci for (let n of numbers) 423af6ab5fSopenharmony_ci res += n 433af6ab5fSopenharmony_ci return res 443af6ab5fSopenharmony_ci } 453af6ab5fSopenharmony_ci console.log(sum_numbers(1, 2, 3)) 463af6ab5fSopenharmony_ci 473af6ab5fSopenharmony_ci function log_numbers(x : number, y : number, z : number) { 483af6ab5fSopenharmony_ci console.log(x, y, z) 493af6ab5fSopenharmony_ci } 503af6ab5fSopenharmony_ci let numbers: number[] = [1, 2, 3] 513af6ab5fSopenharmony_ci log_numbers(numbers[0], numbers[1], numbers[2]) 523af6ab5fSopenharmony_ci 533af6ab5fSopenharmony_ci let list1 : number[] = [1, 2] 543af6ab5fSopenharmony_ci let list2 : number[] = [list1[0], list1[1], 3, 4] 553af6ab5fSopenharmony_ci 563af6ab5fSopenharmony_ci class Point2D { 573af6ab5fSopenharmony_ci x: number = 0; y: number = 0 583af6ab5fSopenharmony_ci } 593af6ab5fSopenharmony_ci 603af6ab5fSopenharmony_ci class Point3D { 613af6ab5fSopenharmony_ci x: number = 0; y: number = 0; z: number = 0 623af6ab5fSopenharmony_ci constructor(p2d: Point2D, z: number) { 633af6ab5fSopenharmony_ci this.x = p2d.x 643af6ab5fSopenharmony_ci this.y = p2d.y 653af6ab5fSopenharmony_ci this.z = z 663af6ab5fSopenharmony_ci } 673af6ab5fSopenharmony_ci } 683af6ab5fSopenharmony_ci 693af6ab5fSopenharmony_ci let p3d = new Point3D({x: 1, y: 2} as Point2D, 3) 703af6ab5fSopenharmony_ci console.log(p3d.x, p3d.y, p3d.z) 713af6ab5fSopenharmony_ci 723af6ab5fSopenharmony_ci class DerivedFromArray extends Uint16Array {}; 733af6ab5fSopenharmony_ci 743af6ab5fSopenharmony_ci let arr1 = [1, 2, 3]; 753af6ab5fSopenharmony_ci let arr2 = new Uint16Array([4, 5, 6]); 763af6ab5fSopenharmony_ci let arr3 = new DerivedFromArray([7, 8, 9]) 773af6ab5fSopenharmony_ci let arr4 = [...arr1, 10, ...arr2, 11, ...arr3] 783af6ab5fSopenharmony_ci 793af6ab5fSopenharmony_ci``` 803af6ab5fSopenharmony_ci 813af6ab5fSopenharmony_ci 82