13af6ab5fSopenharmony_ci/* 23af6ab5fSopenharmony_ci * Copyright (c) 2023-2024 Huawei Device Co., Ltd. 33af6ab5fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 43af6ab5fSopenharmony_ci * you may not use this file except in compliance with the License. 53af6ab5fSopenharmony_ci * You may obtain a copy of the License at 63af6ab5fSopenharmony_ci * 73af6ab5fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 83af6ab5fSopenharmony_ci * 93af6ab5fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 103af6ab5fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 113af6ab5fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123af6ab5fSopenharmony_ci * See the License for the specific language governing permissions and 133af6ab5fSopenharmony_ci * limitations under the License. 143af6ab5fSopenharmony_ci */ 153af6ab5fSopenharmony_ciimport {ohFunction1, ohFunction2, OhosI} from './oh_modules/ohos_lib' 163af6ab5fSopenharmony_ciinterface I { 173af6ab5fSopenharmony_ci a: number; 183af6ab5fSopenharmony_ci b: string; 193af6ab5fSopenharmony_ci} 203af6ab5fSopenharmony_ci 213af6ab5fSopenharmony_ciclass C { 223af6ab5fSopenharmony_ci a: number; 233af6ab5fSopenharmony_ci b: string; 243af6ab5fSopenharmony_ci} 253af6ab5fSopenharmony_ci 263af6ab5fSopenharmony_ciclass C2 { 273af6ab5fSopenharmony_ci q: { x: number; y: string }; 283af6ab5fSopenharmony_ci w: any; 293af6ab5fSopenharmony_ci e: I; 303af6ab5fSopenharmony_ci r: C; 313af6ab5fSopenharmony_ci} 323af6ab5fSopenharmony_ci 333af6ab5fSopenharmony_cifunction localVariable(): void { 343af6ab5fSopenharmony_ci // Declaration 353af6ab5fSopenharmony_ci let a1 = { a: 1, b: 'a' }; // NOT OK 363af6ab5fSopenharmony_ci let a2: any = { a: 2, b: 'b' }; // OK - ASSIGNMENT TO ANY 373af6ab5fSopenharmony_ci let a3: { a: number; b: string } = { a: 30, b: 'c' }; // NOT OK 383af6ab5fSopenharmony_ci let a4: I = { a: 4, b: 'd' }; // OK 393af6ab5fSopenharmony_ci let a5: C = { a: 5, b: 'e' }; // OK 403af6ab5fSopenharmony_ci let a6: C2 = { 413af6ab5fSopenharmony_ci // OK 423af6ab5fSopenharmony_ci q: { x: 6, y: 'f' }, // NOT OK 433af6ab5fSopenharmony_ci w: { a: 7, b: 'g' }, // OK - ASSIGNMENT TO ANY 443af6ab5fSopenharmony_ci e: { a: 8, b: 'h' }, // OK 453af6ab5fSopenharmony_ci r: { a: 9, b: 'i' }, // OK 463af6ab5fSopenharmony_ci }; 473af6ab5fSopenharmony_ci 483af6ab5fSopenharmony_ci // Assignment 493af6ab5fSopenharmony_ci a1 = { a: 11, b: 'a' }; // NOT OK 503af6ab5fSopenharmony_ci a2 = { a: 12, b: 'b' }; // OK - ASSIGNMENT TO ANY 513af6ab5fSopenharmony_ci a3 = { a: 13, b: 'c' }; // NOT OK 523af6ab5fSopenharmony_ci a4 = { a: 14, b: 'd' }; // OK 533af6ab5fSopenharmony_ci a5 = { a: 15, b: 'e' }; // OK 543af6ab5fSopenharmony_ci a6 = { 553af6ab5fSopenharmony_ci // OK 563af6ab5fSopenharmony_ci q: { x: 16, y: 'f' }, // NOT OK 573af6ab5fSopenharmony_ci w: { a: 17, b: 'g' }, // OK - ASSIGNMENT TO ANY 583af6ab5fSopenharmony_ci e: { a: 18, b: 'h' }, // OK 593af6ab5fSopenharmony_ci r: { a: 19, b: 'i' }, // OK 603af6ab5fSopenharmony_ci }; 613af6ab5fSopenharmony_ci} 623af6ab5fSopenharmony_ci 633af6ab5fSopenharmony_cifunction defaultParamValue(): void { 643af6ab5fSopenharmony_ci function foo(x = { a: 21, b: 'a' }) { 653af6ab5fSopenharmony_ci console.log(x.a, x.b); 663af6ab5fSopenharmony_ci } // NOT OK 673af6ab5fSopenharmony_ci function foo2(x: any = { a: 22, b: 'b' }) { 683af6ab5fSopenharmony_ci console.log(x.a, x.b); 693af6ab5fSopenharmony_ci } // NOT OK 703af6ab5fSopenharmony_ci function foo3(x: { a: number; b: string } = { a: 23, b: 'c' }) { 713af6ab5fSopenharmony_ci console.log(x.a, x.b); 723af6ab5fSopenharmony_ci } // NOT OK 733af6ab5fSopenharmony_ci function foo4(x: I = { a: 24, b: 'd' }) { 743af6ab5fSopenharmony_ci console.log(x.a, x.b); 753af6ab5fSopenharmony_ci } // OK 763af6ab5fSopenharmony_ci function foo5(x: C = { a: 25, b: 'e' }) { 773af6ab5fSopenharmony_ci console.log(x.a, x.b); 783af6ab5fSopenharmony_ci } // OK 793af6ab5fSopenharmony_ci 803af6ab5fSopenharmony_ci // Function call 813af6ab5fSopenharmony_ci foo({ a: 21, b: 'a' }); // NOT OK 823af6ab5fSopenharmony_ci foo2({ a: 22, b: 'b' }); // OK - ASSIGNMENT TO ANY 833af6ab5fSopenharmony_ci foo3({ a: 23, b: 'c' }); // NOT OK 843af6ab5fSopenharmony_ci foo4({ a: 24, b: 'd' }); // OK 853af6ab5fSopenharmony_ci foo5({ a: 25, b: 'e' }); // OK 863af6ab5fSopenharmony_ci} 873af6ab5fSopenharmony_ci 883af6ab5fSopenharmony_cifunction returnFromFunction(): void { 893af6ab5fSopenharmony_ci function bar() { 903af6ab5fSopenharmony_ci return { a: 31, b: 'a' }; 913af6ab5fSopenharmony_ci } // NOT OK 923af6ab5fSopenharmony_ci function bar2(): any { 933af6ab5fSopenharmony_ci return { a: 32, b: 'b' }; 943af6ab5fSopenharmony_ci } // OK - ASSIGNMENT TO ANY 953af6ab5fSopenharmony_ci function bar3(): { a: number; b: string } { 963af6ab5fSopenharmony_ci return { a: 33, b: 'c' }; 973af6ab5fSopenharmony_ci } // NOT OK 983af6ab5fSopenharmony_ci function bar4(): I { 993af6ab5fSopenharmony_ci return { a: 34, b: 'd' }; 1003af6ab5fSopenharmony_ci } // OK 1013af6ab5fSopenharmony_ci function bar5(): C { 1023af6ab5fSopenharmony_ci return { a: 35, b: 'e' }; 1033af6ab5fSopenharmony_ci } // OK 1043af6ab5fSopenharmony_ci} 1053af6ab5fSopenharmony_ci 1063af6ab5fSopenharmony_cifunction ternaryOperator(): void { 1073af6ab5fSopenharmony_ci // In ternary operator 1083af6ab5fSopenharmony_ci const condition = true; 1093af6ab5fSopenharmony_ci const a1 = condition ? { a: 41, b: 'a' } : { a: 42, b: 'b' }; // NOT OK 1103af6ab5fSopenharmony_ci const a2: any = condition ? { a: 43, b: 'c' } : { a: 44, b: 'd' }; // OK - ASSIGNMENT TO ANY 1113af6ab5fSopenharmony_ci const a3: { a: number; b: string } = condition 1123af6ab5fSopenharmony_ci ? { a: 45, b: 'e' } 1133af6ab5fSopenharmony_ci : { a: 46, b: 'f' }; // NOT OK 1143af6ab5fSopenharmony_ci const a4: I = condition ? { a: 47, b: 'g' } : { a: 48, b: 'h' }; // OK 1153af6ab5fSopenharmony_ci const a5: C = condition ? { a: 49, b: 'i' } : { a: 50, b: 'j' }; // OK 1163af6ab5fSopenharmony_ci} 1173af6ab5fSopenharmony_ci 1183af6ab5fSopenharmony_cifunction arrayLiteral(): void { 1193af6ab5fSopenharmony_ci const arr1 = [ 1203af6ab5fSopenharmony_ci { a: 51, b: 'a' }, 1213af6ab5fSopenharmony_ci { a: 52, b: 'b' }, 1223af6ab5fSopenharmony_ci ]; // NOT OK 1233af6ab5fSopenharmony_ci const arr2: any[] = [ 1243af6ab5fSopenharmony_ci { a: 53, b: 'c' }, 1253af6ab5fSopenharmony_ci { a: 54, b: 'd' }, 1263af6ab5fSopenharmony_ci ]; // OK - ASSIGNMENT TO ANY 1273af6ab5fSopenharmony_ci const arr3: { a: number; b: string }[] = [ 1283af6ab5fSopenharmony_ci { a: 55, b: 'e' }, 1293af6ab5fSopenharmony_ci { a: 56, b: 'f' }, 1303af6ab5fSopenharmony_ci ]; // NOT OK 1313af6ab5fSopenharmony_ci const arr4: I[] = [ 1323af6ab5fSopenharmony_ci { a: 57, b: 'g' }, 1333af6ab5fSopenharmony_ci { a: 58, b: 'h' }, 1343af6ab5fSopenharmony_ci ]; // OK 1353af6ab5fSopenharmony_ci const arr5: C[] = [ 1363af6ab5fSopenharmony_ci { a: 59, b: 'i' }, 1373af6ab5fSopenharmony_ci { a: 60, b: 'j' }, 1383af6ab5fSopenharmony_ci ]; // OK 1393af6ab5fSopenharmony_ci} 1403af6ab5fSopenharmony_ci 1413af6ab5fSopenharmony_cienum E { 1423af6ab5fSopenharmony_ci OK, 1433af6ab5fSopenharmony_ci NO_OK, 1443af6ab5fSopenharmony_ci} 1453af6ab5fSopenharmony_ciinterface I1 { 1463af6ab5fSopenharmony_ci v: E | number 1473af6ab5fSopenharmony_ci} 1483af6ab5fSopenharmony_ci 1493af6ab5fSopenharmony_ciinterface I2 { 1503af6ab5fSopenharmony_ci v: E 1513af6ab5fSopenharmony_ci} 1523af6ab5fSopenharmony_ci 1533af6ab5fSopenharmony_cilet i1: I1 = {v:E.OK} 1543af6ab5fSopenharmony_cilet i2: I2 = {v:E.NO_OK} 1553af6ab5fSopenharmony_ci 1563af6ab5fSopenharmony_cifunction g1(a: E) { 1573af6ab5fSopenharmony_ci let ii1: I1 = {v:a} 1583af6ab5fSopenharmony_ci let ii2: I2 = {v:a} 1593af6ab5fSopenharmony_ci} 1603af6ab5fSopenharmony_ci 1613af6ab5fSopenharmony_cifunction g(): boolean { 1623af6ab5fSopenharmony_ci return true; 1633af6ab5fSopenharmony_ci} 1643af6ab5fSopenharmony_ciinterface CondI { 1653af6ab5fSopenharmony_ci a: number; 1663af6ab5fSopenharmony_ci} 1673af6ab5fSopenharmony_cilet a1: CondI = { 1683af6ab5fSopenharmony_ci a: g() ? 0 : 1, 1693af6ab5fSopenharmony_ci}; 1703af6ab5fSopenharmony_cilet b1: CondI = { 1713af6ab5fSopenharmony_ci a: (g() ? 0 : 1) as number, 1723af6ab5fSopenharmony_ci}; 1733af6ab5fSopenharmony_cilet c1 = g() ? 0 : 1; 1743af6ab5fSopenharmony_cilet d1: CondI = { 1753af6ab5fSopenharmony_ci a: c1, 1763af6ab5fSopenharmony_ci}; 1773af6ab5fSopenharmony_cilet e1: CondI = { 1783af6ab5fSopenharmony_cia: 0|1|2|3 1793af6ab5fSopenharmony_ci} 1803af6ab5fSopenharmony_cilet f1: 0|1|2|3 = 3 1813af6ab5fSopenharmony_cilet ff : CondI = { 1823af6ab5fSopenharmony_ci a: f1 1833af6ab5fSopenharmony_ci} 1843af6ab5fSopenharmony_ci 1853af6ab5fSopenharmony_cilet dict = new Map<string, string | number>(); 1863af6ab5fSopenharmony_cidict.set('1', 123) 1873af6ab5fSopenharmony_ci 1883af6ab5fSopenharmony_ciinterface III { 1893af6ab5fSopenharmony_ci param?: string | number | boolean 1903af6ab5fSopenharmony_ci} 1913af6ab5fSopenharmony_ci 1923af6ab5fSopenharmony_cilet test1: III = { param: dict.get('1') } as III 1933af6ab5fSopenharmony_cilet test2: III = { param: dict.get('1')! } as III 1943af6ab5fSopenharmony_cilet test3: III = { param: dict.get('1') as number } as III 1953af6ab5fSopenharmony_cilet test4: III = { param: dict.get('1') as (number | string) } as III 1963af6ab5fSopenharmony_ciexport interface Style { 1973af6ab5fSopenharmony_ci} 1983af6ab5fSopenharmony_ciexport class SwitchMenuStyle implements Style { 1993af6ab5fSopenharmony_ci} 2003af6ab5fSopenharmony_ciexport class ProfileOneLineSwitchMenuStyle extends SwitchMenuStyle { 2013af6ab5fSopenharmony_ci} 2023af6ab5fSopenharmony_ciexport class ProfileSwitchMenuStyle extends SwitchMenuStyle { 2033af6ab5fSopenharmony_ci} 2043af6ab5fSopenharmony_ciexport let hfpProfileSwitchMenuStyle = new ProfileSwitchMenuStyle(); 2053af6ab5fSopenharmony_ciexport let hfpProfileOneLineSwitchMenuStyle = new ProfileOneLineSwitchMenuStyle(); 2063af6ab5fSopenharmony_ci 2073af6ab5fSopenharmony_ciexport interface SettingsBaseMenuData { 2083af6ab5fSopenharmony_ci style?: Style; 2093af6ab5fSopenharmony_ci} 2103af6ab5fSopenharmony_ci 2113af6ab5fSopenharmony_cifunction test(isDisConnected:boolean){ 2123af6ab5fSopenharmony_ci let a={style: isDisConnected ? hfpProfileOneLineSwitchMenuStyle: hfpProfileSwitchMenuStyle} as SettingsBaseMenuData 2133af6ab5fSopenharmony_ci} 2143af6ab5fSopenharmony_ci 2153af6ab5fSopenharmony_ciinterface PPP { 2163af6ab5fSopenharmony_ci x: number 2173af6ab5fSopenharmony_ci y: number | undefined 2183af6ab5fSopenharmony_ci z?: number 2193af6ab5fSopenharmony_ci} 2203af6ab5fSopenharmony_ci 2213af6ab5fSopenharmony_cilet p1: PPP = {x: 10, y: 10} 2223af6ab5fSopenharmony_cilet p2: PPP = {x: 10, y: undefined} 2233af6ab5fSopenharmony_cilet p3: PPP = {x: 10, y: undefined, z: undefined} 2243af6ab5fSopenharmony_cilet p4: PPP = {x: 10, y: undefined, z: 10} 2253af6ab5fSopenharmony_cilet p5: PPP = {x: 10, y: 10, z: 10} 2263af6ab5fSopenharmony_ciconst cp1: PPP = {x: 10, y: 10} 2273af6ab5fSopenharmony_ciconst cp2: PPP = {x: 10, y: undefined} 2283af6ab5fSopenharmony_ciconst cp3: PPP = {x: 10, y: undefined, z: undefined} 2293af6ab5fSopenharmony_ciconst cp4: PPP = {x: 10, y: undefined, z: 10} 2303af6ab5fSopenharmony_ciconst cp5: PPP = {x: 10, y: 10, z: 10} 2313af6ab5fSopenharmony_ci 2323af6ab5fSopenharmony_ciconst oi: OhosI = { f: 1 }; 2333af6ab5fSopenharmony_ci 2343af6ab5fSopenharmony_ciohFunction1({d: oi}) 2353af6ab5fSopenharmony_ciohFunction1({d: {f: 1}}) 2363af6ab5fSopenharmony_ciohFunction2({d: oi}) 2373af6ab5fSopenharmony_ciohFunction2({d: {f: 1}}) 238