/* * Copyright (c) 2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ interface It { } class Cl implements It { constructor(p: T) { this.x = p; } static resolve(value: U|It): Cl { if (value instanceof Cl) { return value as Cl; } return new Cl(value as U); } x: T; print(): string { if (this.x == undefined) { return "value is " + this.x; } else if (this.x instanceof string) { return "string: '" + this.x + "'"; } else { return "number = " + this.x; } } } function main(): void { assert(Cl.resolve(undefined).print() == "value is undefined"); assert(Cl.resolve("test").print() == "string: 'test'"); assert(Cl.resolve(5.5).print() == "number = 5.5"); assert(Cl.resolve(new Int(8)).print() == "number = 8"); assert(Cl.resolve(new Cl(null)).print() == "value is null"); assert(Cl.resolve(new Cl("TEST")).print() == "string: 'TEST'"); assert(Cl.resolve(new Cl(7.7)).print() == "number = 7.7"); assert(Cl.resolve(new Cl(new Int(-8))).print() == "number = -8"); }