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 foo(){} 19} 20 21class B extends A{ 22 bfield1:number = 10; 23 bfoo(){} 24} 25 26function getProperty<K extends (A|number|(keyof B))>(key: K){} 27 28function main():void{ 29 let a:A = new A(); 30 let b:B = new B(); 31 32 type keyofA = keyof A; 33 type keyofB = keyof B; 34 type keyofUnion = keyofA|keyofB|number|A|B; 35 let x1:keyofUnion = "field1"; 36 let x2:keyofUnion = "foo"; 37 let x3:keyofUnion = "field1"; 38 let x4:keyofUnion = "foo"; 39 let x5:keyofUnion = 100; 40 let x6:keyofUnion = a; 41 let x7:keyofUnion = b; 42 43 getProperty<keyofB>("field1") 44 getProperty<keyofB>("bfoo") 45 getProperty<A>(a) 46} 47