1/* 2* Copyright (c) Microsoft Corporation. All rights reserved. 3* Copyright (c) 2023 Huawei Device Co., Ltd. 4* Licensed under the Apache License, Version 2.0 (the "License"); 5* you may not use this file except in compliance with the License. 6* You may obtain a copy of the License at 7* 8* http://www.apache.org/licenses/LICENSE-2.0 9* 10* Unless required by applicable law or agreed to in writing, software 11* distributed under the License is distributed on an "AS IS" BASIS, 12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13* See the License for the specific language governing permissions and 14* limitations under the License. 15* 16* This file has been modified by Huawei to verify type inference by adding verification statements. 17*/ 18 19// === tests/cases/conformance/types/typeRelationships/assignmentCompatibility/undefinedAssignableToEveryType.ts === 20declare function AssertType(value:any, type:string):void; 21class C { 22 foo: string; 23} 24let ac: C; 25AssertType(ac, "C"); 26 27interface I { 28 foo: string; 29} 30let ai: I; 31AssertType(ai, "I"); 32 33enum E { A } 34let ae: E; 35AssertType(ae, "E"); 36 37let b: number = undefined; 38AssertType(b, "number"); 39AssertType(undefined, "undefined"); 40 41let c: string = undefined; 42AssertType(c, "string"); 43AssertType(undefined, "undefined"); 44 45let d: boolean = undefined; 46AssertType(d, "boolean"); 47AssertType(undefined, "undefined"); 48 49let e: Date = undefined; 50AssertType(e, "Date"); 51AssertType(undefined, "undefined"); 52 53let f: any = undefined; 54AssertType(f, "any"); 55AssertType(undefined, "undefined"); 56 57let g: void = undefined; 58AssertType(g, "void"); 59AssertType(undefined, "undefined"); 60 61let h: Object = undefined; 62AssertType(h, "Object"); 63AssertType(undefined, "undefined"); 64 65let i: {} = undefined; 66AssertType(i, "{}"); 67AssertType(undefined, "undefined"); 68 69let j: () => {} = undefined; 70AssertType(j, "() => {}"); 71AssertType(undefined, "undefined"); 72 73let k: Function = undefined; 74AssertType(k, "Function"); 75AssertType(undefined, "undefined"); 76 77let l: (x: number) => string = undefined; 78AssertType(l, "(number) => string"); 79AssertType(x, "number"); 80AssertType(undefined, "undefined"); 81 82ac = undefined; 83AssertType(ac = undefined, "undefined"); 84AssertType(ac, "C"); 85AssertType(undefined, "undefined"); 86 87ai = undefined; 88AssertType(ai = undefined, "undefined"); 89AssertType(ai, "I"); 90AssertType(undefined, "undefined"); 91 92ae = undefined; 93AssertType(ae = undefined, "undefined"); 94AssertType(ae, "E"); 95AssertType(undefined, "undefined"); 96 97let m: number[] = undefined; 98AssertType(m, "number[]"); 99AssertType(undefined, "undefined"); 100 101let n: { foo: string } = undefined; 102AssertType(n, "{ foo: string; }"); 103AssertType(foo, "string"); 104AssertType(undefined, "undefined"); 105 106let o: <T>(x: T) => T = undefined; 107AssertType(o, "<T>(T) => T"); 108AssertType(x, "T"); 109AssertType(undefined, "undefined"); 110 111let p: Number = undefined; 112AssertType(p, "Number"); 113AssertType(undefined, "undefined"); 114 115let q: String = undefined; 116AssertType(q, "String"); 117AssertType(undefined, "undefined"); 118 119function foo<T, U, V extends Date>(x: T, y: U, z: V) { 120 x = undefined; 121AssertType(x = undefined, "undefined"); 122AssertType(x, "T"); 123AssertType(undefined, "undefined"); 124 125 y = undefined; 126AssertType(y = undefined, "undefined"); 127AssertType(y, "U"); 128AssertType(undefined, "undefined"); 129 130 z = undefined; 131AssertType(z = undefined, "undefined"); 132AssertType(z, "V"); 133AssertType(undefined, "undefined"); 134} 135//function foo<T, U extends T, V extends Date>(x: T, y: U, z: V) { 136// x = undefined; 137// y = undefined; 138// z = undefined; 139//} 140 141