1/* 2 * Copyright (c) 2024 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 16function main() { 17 let resolve: ((value: string) => void) | null = null; 18 19 let p = new Promise<string>((_resolve: (value: string)=> void): void => { 20 resolve = _resolve; 21 }); 22 23 resolve!("abc"); // no smart cast! 24 25 let x: Number|String|undefined = "test1"; 26 let y: Number|String|undefined = "test2" 27 let z: Number|String|undefined = 7 28 29 let lam: () => void = () => { 30 let y: Number|String|undefined = 2; // hides outer declaration! 31 x = z; 32 let tmp: number = y; // smart cast is used 33 assert(tmp == 2); 34 }; 35 36 if (x instanceof string) { 37 let tmp: string = x as string; // no smart cast! 38 assert(tmp == "test1"); 39 } 40 41 lam(); 42 43 assert(x == 7); 44 45 if (y instanceof string) { 46 let tmp: string = y; // smart cast is used 47 assert(tmp == "test2"); 48 } 49 50 let w: number = z; // smart cast is used 51 assert(w == 7) 52} 53