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<T> { 17 A(a?: T | number[]) { 18 if (a instanceof Error) { 19 return this.D(a); 20 } else if (a instanceof undefined) { 21 return this.B(a); 22 } else if (a instanceof number[]) { 23 return this.E(a); 24 } else { 25 return this.C(a); 26 } 27 } 28 29 B(b: undefined) { 30 return "undefined"; 31 } 32 33 C(c: T) { 34 return "Generic"; 35 } 36 37 D(d: Error) { 38 return "Error"; 39 } 40 41 E(e: number[]) { 42 return "number[]" 43 } 44} 45 46let a = new A<Error | number>(); 47assertEQ(a.A(Error()), "Error"); 48assertEQ(a.A(undefined), "undefined"); 49assertEQ(a.A(1), "Generic"); 50assertEQ(a.A([1, 2, 3]), "number[]") 51