1/** 2 * Copyright (c) 2024 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 Class1 { fld: Number = 2; } 17 18function test_1(): void { 19 let class1_partial: Partial<Class1> = {fld: 3}; 20 assert class1_partial.fld == 3; 21 class1_partial.fld = undefined; 22 assert class1_partial.fld === undefined; 23} 24 25// ----------------------------------------------- 26 27class Class2 { 28 fld: Number = 2; 29 foo(a0: Partial<Class2>) { 30 a0.fld = undefined; 31 } 32} 33 34function test_2(): void { 35 let class2_original: Class2 = new Class2(); 36 let class2_partial: Partial<Class2> = {fld: 3}; 37 assert class2_partial.fld == 3; 38 class2_original.foo(class2_partial); 39 assert class2_partial.fld === undefined; 40} 41 42// ----------------------------------------------- 43 44class Class3 { 45 mmeb: Number = 2; 46 foo(a0: Partial<Class5>){ 47 a0.mmeb = undefined; 48 } 49} 50 51class Class4 extends Class3 {} 52 53class Class5 extends Class4 { 54 mmeb: Number = 2; 55 foo(a0: Partial<Class3>){ 56 a0.mmeb = undefined; 57 } 58} 59 60function test_3(): void { 61 let class3_original: Class3 = new Class3(); 62 let class5_original: Class3 = new Class5(); 63 let class3_partial: Partial<Class3> = {mmeb: 8}; 64 let class5_partial: Partial<Class5> = {mmeb: 10}; 65 class3_original.foo(class5_partial); 66 class5_original.foo(class3_partial); 67 assert class3_partial.mmeb === undefined; 68 assert class5_partial.mmeb === undefined; 69} 70 71// ----------------------------------------------- 72 73class Class6<T> { 74 mmeb: Number = 2; 75 foo(a0: Partial<T>){ 76 if(this.mmeb == 3){ 77 return; 78 } 79 80 this.bar(a0); 81 } 82 bar(a0: Partial<T>){ 83 this.mmeb = 3; 84 this.foo(a0); 85 } 86} 87 88class Class7 { fld: Number = 6;} 89 90class Class8 <T extends Class7> { 91 baz(a0: Partial<T>){ 92 a0.fld = undefined; 93 } 94} 95 96function test_4(): void { 97 let class7_partial: Partial<Class7> = {fld: 8}; 98 let class6_original: Class6<Class7> = new Class6<Class7>(); 99 class6_original.foo(class7_partial); 100} 101 102// ----------------------------------------------- 103 104class Class9 { fld: Number = 8; } 105 106class Class10 extends Class9 { memb: Number = 9; } 107 108function test_5(): void { 109 let class10_partial: Partial<Class10> = {memb: 7, fld: 5}; 110 111 assert class10_partial.memb == 7; 112 assert class10_partial.fld == 5; 113 114 class10_partial.memb = undefined; 115 class10_partial.fld = undefined; 116 117 assert class10_partial.memb === undefined; 118 assert class10_partial.fld === undefined; 119} 120 121//--------------------------------------- 122 123function main(): void { 124 test_1(); 125 test_2(); 126 test_3(); 127 test_4(); 128 test_5(); 129} 130