1/* 2 * Copyright (c) 2025 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 A{ 17 field1:number = 10; 18 private field2:number = 20; 19 foo(){} 20} 21 22function foo(c: (keyof A)|"abcd"|A|undefined): string { 23 if (c instanceof (keyof A)) { 24 assertEQ(c, "field1") 25 return "Case 1"; 26 } else if (c instanceof "abcd") { 27 assertEQ(c, "abcd") 28 return "Case 2"; 29 } else if (c instanceof A) { 30 assertEQ(c.field1, 0) 31 return "Case 3"; 32 } else { 33 return "Case 4"; 34 } 35} 36 37function main(): void { 38 /* @@ label1 */foo(/* @@ label2 */"field2"); 39 /* @@ label3 */foo(/* @@ label4 */"other field"); 40} 41 42 43/* @@@ label1 Error TypeError: No matching call signature for foo("field2") */ 44/* @@@ label2 Error TypeError: Type '"field2"' is not compatible with type '"abcd"|A|undefined|"foo"|"field1"' at index 1 */ 45/* @@@ label3 Error TypeError: No matching call signature for foo("other field") */ 46/* @@@ label4 Error TypeError: Type '"other field"' is not compatible with type '"abcd"|A|undefined|"foo"|"field1"' at index 1 */ 47