1/* 2 * Copyright (c) 2025 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 A { 17 a: number = -11; 18 tuple: [number, string, boolean] = [1, 'hi', true] 19 arrs: [[number, number, boolean], [boolean, number, boolean]] = [ 20 [1, 3.14, true], this.cc() 21 ] 22 val: (number|string|boolean) [] = new A().tuple 23 A() { 24 const tuple2: [string, number, boolean] = ['s', 3.14, true] 25 let array2: (string | number | boolean)[] = tuple2 26 27 } 28 aa(): number { 29 let ss: number[] = [-1, -5] 30 return ss[0]; 31 } 32 cc(): [boolean, number, boolean] { 33 return [true, 33, false]; 34 } 35 dd(): [boolean, string, A] { 36 return [true, 'hello', new A()]; 37 } 38 ee() { 39 let ccVal: (boolean | number | boolean)[] = this.cc() 40 return ccVal; 41 } 42 43 ff() { 44 let array = tuple; 45 return array; 46 } 47 gg() { 48 return this.arrs[0]; 49 } 50} 51 52function test2() { 53 const tuple3: [string, number, boolean] = ['s', 3.14, true] 54 return tuple3; 55} 56function test3() { 57 let obj: A = new A() 58 return obj.dd(); 59} 60 61let a: A = new A() 62 63const tuple: [number, number, boolean] = [1, 3.14, true] 64const tuple1: [number, string, boolean] = [1, '3.14', true] 65const array: (number | boolean)[] = tuple 66const tuple2: [string, number, boolean] = ['s', 3.14, true] 67const array1: (number | string | boolean)[] = tuple1 68const array2: (string | number | boolean)[] = tuple2 69 70let tt: (string | number | boolean)[] = this.test2() 71let gg: (boolean | number | boolean)[] = new A().ee() 72let ff = new A().ff() 73let hh: (boolean | number | boolean)[] =ff 74let mm: (boolean | number | boolean)[] = a.gg(); 75let test: (boolean | string | A)[] = this.test3() 76 77let tuple14: [number, boolean] = [3.14, true] 78let array13: (number|boolean)[] = tuple as (number|boolean)[] //error 79let array14: (number|boolean)[] = tuple14 as (number|boolean)[] //error 80let array15: (number|boolean)[] = array as (number|boolean)[] 81let array16: (boolean | number | boolean)[] = a.gg() as (boolean | number | boolean)[] //error 82let tuple15: [string, number, boolean] = this.test2() as [string, number, boolean] 83let tuple16: [number, number, boolean] = array as [number, number, boolean] 84let tuple17: [number, string, boolean] = ['s', 3.14, true] as [number, string, boolean] 85const array17 = Array.from({ length: 5 }, (_, index) => index % 2 === 0 ? index : index % 3 === 0); 86let tuple19: [number, boolean] = array17 as [number, boolean] //error 87const originalArray: [number] = [1, 2, 3, 4, 5]; 88const array18 = originalArray.map((value) => value % 2 === 0 ? true : value * 2); 89let tuple20: [number, boolean] = array18 as [number, boolean] //error 90let array20: (number)[] = originalArray as (number)[] //error 91 92const inputArray: readonly [Record<string, never>, [], () => void] = [ 93 {}, 94 [], 95 () => { 96 } 97]; 98const even = (element: Record<string, never> | [] | (() => void)): boolean => { 99 return typeof element === 'function'; 100}; 101const res = inputArray.some(even); // error 102console.log("res:" + JSON.stringify(res)); 103console.log(''+inputArray.length) // error 104console.log(inputArray.toString()) // error 105typeof inputArray.toLocaleString(); // error 106function getConcat() { 107 inputArray.concat(); // error 108 return inputArray.join(','); // error 109} 110class Demo{ 111 set(){ 112 inputArray.slice(1,2); // error 113 inputArray.indexOf([]); // error 114 } 115 get(){ 116 return inputArray.lastIndexOf([]); // error 117 } 118} 119inputArray.every(()=>{}) // error 120inputArray.some(()=>{}) // error 121inputArray.forEach(()=>{}) // error 122inputArray.map(()=>{}) // error 123inputArray.filter(()=>{}) // error 124inputArray.reduce((acc, item) => acc + 1, 0); // error 125inputArray.reduceRight((acc, item) => acc + 1, 0); // error 126inputArray.find((item) => Array.isArray(item)); // error 127inputArray.includes(() => {}); // error 128inputArray.flat() // error 129inputArray.flatMap((item) => [item]); // error 130inputArray.findIndex((item) => typeof item === 'function'); // error