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/expressions/contextualTyping/superCallParameterContextualTyping3.ts === 20declare function AssertType(value:any, type:string):void; 21interface ContextualType<T> { 22 method(parameter: T): void; 23} 24 25class CBase<T> { 26 constructor(param: ContextualType<T>) { 27 } 28 29 foo(param: ContextualType<T>) { 30 } 31} 32 33class C extends CBase<string> { 34 constructor() { 35 // Should be okay. 36 // 'p' should have type 'string'. 37 super({ 38AssertType(super({ method(p) { p.length; } }), "void"); 39AssertType(super, "typeof CBase"); 40AssertType({ method(p) { p.length; } }, "{ method(string): void; }"); 41 42 method(p) { 43AssertType(method, "(string) => void"); 44AssertType(p, "string"); 45 46 p.length; 47AssertType(p.length, "number"); 48 } 49 }); 50 51 // Should be okay. 52 // 'p' should have type 'string'. 53 super.foo({ 54AssertType(super.foo({ method(p) { p.length; } }), "void"); 55AssertType(super.foo, "(ContextualType<string>) => void"); 56AssertType(super, "CBase<string>"); 57AssertType({ method(p) { p.length; } }, "{ method(string): void; }"); 58 59 method(p) { 60AssertType(method, "(string) => void"); 61AssertType(p, "string"); 62 63 p.length; 64AssertType(p.length, "number"); 65 } 66 }); 67 } 68} 69 70