13af6ab5fSopenharmony_ci/* 23af6ab5fSopenharmony_ci * Copyright (c) 2022-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_ci 163af6ab5fSopenharmony_ciimport { foo, bar } from "./oh_modules/ohos_lib" 173af6ab5fSopenharmony_ci 183af6ab5fSopenharmony_cifunction restSpread() { 193af6ab5fSopenharmony_ci const arr = [1, 2, 3]; 203af6ab5fSopenharmony_ci function test(a, ...t) { 213af6ab5fSopenharmony_ci console.log(a); // 1 223af6ab5fSopenharmony_ci console.log(t[0]); // 2 233af6ab5fSopenharmony_ci console.log(t[1]); // 3 243af6ab5fSopenharmony_ci } 253af6ab5fSopenharmony_ci test(1, ...arr); 263af6ab5fSopenharmony_ci} 273af6ab5fSopenharmony_ci 283af6ab5fSopenharmony_ciclass MyGenerator { 293af6ab5fSopenharmony_ci public *getValues() { 303af6ab5fSopenharmony_ci // you can put the return type Generator<number>, but it is ot necessary as ts will infer 313af6ab5fSopenharmony_ci let index = 1; 323af6ab5fSopenharmony_ci while (true) { 333af6ab5fSopenharmony_ci yield index; 343af6ab5fSopenharmony_ci index = index + 1; 353af6ab5fSopenharmony_ci 363af6ab5fSopenharmony_ci if (index > 10) { 373af6ab5fSopenharmony_ci break; 383af6ab5fSopenharmony_ci } 393af6ab5fSopenharmony_ci } 403af6ab5fSopenharmony_ci } 413af6ab5fSopenharmony_ci} 423af6ab5fSopenharmony_ci 433af6ab5fSopenharmony_cifunction defaultTypeParam<t, tt = string>(i: t, j: tt) { 443af6ab5fSopenharmony_ci const c = i; 453af6ab5fSopenharmony_ci const s = j; 463af6ab5fSopenharmony_ci} 473af6ab5fSopenharmony_ci 483af6ab5fSopenharmony_cifunction arrowFunctionTest() { 493af6ab5fSopenharmony_ci const empty = () => {}; // no return type 503af6ab5fSopenharmony_ci 513af6ab5fSopenharmony_ci const double = (x: number) => x * 2; // no return type 523af6ab5fSopenharmony_ci 533af6ab5fSopenharmony_ci const square = (x): number => x * x; // no param type 543af6ab5fSopenharmony_ci 553af6ab5fSopenharmony_ci const sqrt = (x) => Math.sqrt(x); // shortcut syntax 563af6ab5fSopenharmony_ci const even = [1, 2, 3, 4, 5, 6].filter((x) => x % 2 === 0); // shortcut syntax 573af6ab5fSopenharmony_ci 583af6ab5fSopenharmony_ci const foo = (x: number, y): boolean => x == y; // types are partly omitted 593af6ab5fSopenharmony_ci 603af6ab5fSopenharmony_ci const generic = <T, E>(t: T, e: E) => t; // Generic lambda 613af6ab5fSopenharmony_ci} 623af6ab5fSopenharmony_ci 633af6ab5fSopenharmony_cifunction fooThis(i: number): void { 643af6ab5fSopenharmony_ci this.c = 10; 653af6ab5fSopenharmony_ci} 663af6ab5fSopenharmony_ciclass C { 673af6ab5fSopenharmony_ci c: number; 683af6ab5fSopenharmony_ci m = fooThis; 693af6ab5fSopenharmony_ci} 703af6ab5fSopenharmony_ci 713af6ab5fSopenharmony_cifunction choose<T>(x: T, y: T): T { 723af6ab5fSopenharmony_ci return Math.random() < 0.5 ? x : y; 733af6ab5fSopenharmony_ci} 743af6ab5fSopenharmony_ciconst choice1 = choose(10, 20); 753af6ab5fSopenharmony_ciconst choice2 = choose<string>('apple', 'orange'); 763af6ab5fSopenharmony_ci 773af6ab5fSopenharmony_ciclass Collection<T> { 783af6ab5fSopenharmony_ci items: T[] = []; 793af6ab5fSopenharmony_ci 803af6ab5fSopenharmony_ci constructor(...args: T[]) { 813af6ab5fSopenharmony_ci if (!args) return; 823af6ab5fSopenharmony_ci 833af6ab5fSopenharmony_ci for (const arg of args) this.items.push(arg); 843af6ab5fSopenharmony_ci } 853af6ab5fSopenharmony_ci} 863af6ab5fSopenharmony_ciconst col = new Collection<number>(1, 2, 3); 873af6ab5fSopenharmony_ciconst col2 = new Collection('a', 'b', 'c'); 883af6ab5fSopenharmony_ci 893af6ab5fSopenharmony_cifunction f(a: string): number { 903af6ab5fSopenharmony_ci return 42; 913af6ab5fSopenharmony_ci} 923af6ab5fSopenharmony_ci 933af6ab5fSopenharmony_cifoo(f(null)); 943af6ab5fSopenharmony_cifoo(null); 953af6ab5fSopenharmony_ci 963af6ab5fSopenharmony_cifoo(() => { 973af6ab5fSopenharmony_ci f(null); 983af6ab5fSopenharmony_ci}); 993af6ab5fSopenharmony_ci 1003af6ab5fSopenharmony_cibar(() => { 1013af6ab5fSopenharmony_ci f(null); 1023af6ab5fSopenharmony_ci}, null, f(null)); 1033af6ab5fSopenharmony_ci 1043af6ab5fSopenharmony_cibar(() => { 1053af6ab5fSopenharmony_ci bar(() => { 1063af6ab5fSopenharmony_ci f(null); 1073af6ab5fSopenharmony_ci }, null, f(null)); 1083af6ab5fSopenharmony_ci}, null, foo(f(null))); 1093af6ab5fSopenharmony_ci 1103af6ab5fSopenharmony_citype PropDecorator = () => void; 1113af6ab5fSopenharmony_cilet Builder: PropDecorator; 1123af6ab5fSopenharmony_ci 1133af6ab5fSopenharmony_ci// this test is useless until we use custom tsc 1143af6ab5fSopenharmony_ci@Builder 1153af6ab5fSopenharmony_cifunction buildSwiper() { 1163af6ab5fSopenharmony_ci f(null) 1173af6ab5fSopenharmony_ci foo(null) { 1183af6ab5fSopenharmony_ci f(null) 1193af6ab5fSopenharmony_ci foo(null) { 1203af6ab5fSopenharmony_ci f(null) 1213af6ab5fSopenharmony_ci foo(() => { 1223af6ab5fSopenharmony_ci f(null) 1233af6ab5fSopenharmony_ci }) 1243af6ab5fSopenharmony_ci } 1253af6ab5fSopenharmony_ci .foo(null) 1263af6ab5fSopenharmony_ci } 1273af6ab5fSopenharmony_ci} 128