1/* Copyright (c) 2024-2025 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<A77<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 assertEQ(x.foo(undefined), "undefined") 31 assertEQ(x.foo(y), "Partial<B77>") 32} 33 34function main() : void { 35 let x: A77<B77> = new B77(); 36 let y: Partial<B77> = {}; 37 38 assertEQ(x.foo(undefined), "undefined") 39 assertEQ(x.foo(y), "Partial<B77>") 40 41 bar<B77>(x, y); 42 43 let z = new B77(); 44 assertEQ(z.foo(undefined), "undefined") 45 assertEQ(z.foo(y), "Partial<B77>") 46} 47