1/* 2* Copyright (c) Microsoft Corporation. All rights reserved. 3* Copyright (c) 2023 Huawei Device Co., Ltd. 4* Licensed under the Apache License, Version 2.0 (the "License"); 5* you may not use this file except in compliance with the License. 6* You may obtain a copy of the License at 7* 8* http://www.apache.org/licenses/LICENSE-2.0 9* 10* Unless required by applicable law or agreed to in writing, software 11* distributed under the License is distributed on an "AS IS" BASIS, 12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13* See the License for the specific language governing permissions and 14* limitations under the License. 15* 16* This file has been modified by Huawei to verify type inference by adding verification statements. 17*/ 18 19// === tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPrivates2.ts === 20declare function AssertType(value:any, type:string):void; 21// object types are identical structurally 22 23class C<T> { 24 private foo: T; 25} 26 27class D<T> extends C<T> { 28} 29 30function foo1(x: C<string>); 31function foo1(x: C<number>); // ok 32function foo1(x: any) { } 33 34function foo2(x: D<string>); 35function foo2(x: D<number>); // ok 36function foo2(x: any) { } 37 38function foo3(x: C<string>); 39function foo3(x: D<number>); // ok 40function foo3(x: any) { } 41 42function foo4(x: C<number>): number; 43function foo4(x: D<number>): string; // BUG 831926 44function foo4(x: any): any { } 45 46let r = foo4(new C<number>()); 47AssertType(r, "number"); 48AssertType(foo4(new C<number>()), "number"); 49AssertType(foo4, "{ (C<number>): number; (D<number>): string; }"); 50AssertType(new C<number>(), "C<number>"); 51AssertType(C, "typeof C"); 52 53let r = foo4(new D<number>()); 54AssertType(r, "number"); 55AssertType(foo4(new D<number>()), "number"); 56AssertType(foo4, "{ (C<number>): number; (D<number>): string; }"); 57AssertType(new D<number>(), "D<number>"); 58AssertType(D, "typeof D"); 59 60function foo5(x: C<number>): number; 61function foo5(x: C<number>): string; // error 62function foo5(x: any): any { } 63 64function foo6(x: D<number>): number; 65function foo6(x: D<number>): string; // error 66function foo6(x: any): any { } 67 68 69 70 71