• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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