1/* Copyright (c) 2024 Huawei Device Co., Ltd. 2 * Licensed under the Apache License, Version 2.0 (the "License"); 3 * you may not use this file except in compliance with the License. 4 * You may obtain a copy of the License at 5 * 6 * http://www.apache.org/licenses/LICENSE-2.0 7 * 8 * Unless required by applicable law or agreed to in writing, software 9 * distributed under the License is distributed on an "AS IS" BASIS, 10 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 * See the License for the specific language governing permissions and 12 * limitations under the License. 13 */ 14 15abstract class A77<T> { 16 abstract foo(x?: Partial<T>): string; 17} 18 19class B77 extends A77<B77> { 20 override foo(x?: Partial<B77>): string { 21 if (x == undefined) { 22 return "undefined"; 23 } else { 24 return "Partial<B77>"; 25 } 26 }; 27} 28 29function bar<T>(x: A77<T>, y: Partial<A77<T>>): void { 30 assert (x.foo(undefined) == "undefined"); 31 assert (x.foo(y) == "Partial<B77>"); 32} 33 34function main() : void { 35 let x: A77<B77> = new B77(); 36 let y: Partial<B77> = {}; 37 38 assert (x.foo(undefined) == "undefined"); 39 assert (x.foo(y) == "Partial<B77>"); 40 41 bar<B77>(x, y); 42 43 let z = new B77(); 44 assert (z.foo(undefined) == "undefined"); 45 assert (z.foo(y) == "Partial<B77>"); 46} 47