TypeScript中使用交叉类型后,变量su为何返回undefined?
为什么控制台返回'su' is undefined?
嘿,这事儿其实很容易搞混——你只是声明了变量类型,但没有给变量初始化实际的对象而已!
让我拆解下问题:
- 你通过
let su:SuperUser;告诉TypeScript「这个变量的类型应该是SuperUser」,但JavaScript里声明变量不赋值的话,默认值就是undefined。 - 虽然你之后写了
su.id = 1;,但这本质上是在给undefined的属性赋值,运行时这个变量本身还是undefined,所以控制台输出它自然就是undefined了。
修复方案
你需要给su初始化一个符合SuperUser类型的对象,两种方式都可以:
方式一:声明时直接初始化
type User ={ id: number; name?: string; nickname?: string; } type Info = { id: number; city?: string; } type SuperUser = User & Info; // 直接创建符合类型的对象 let su:SuperUser = { id: 1 }; console.log(su); // 输出: { id: 1 }
方式二:先声明,后续再赋值完整对象
type User ={ id: number; name?: string; nickname?: string; } type Info = { id: number; city?: string; } type SuperUser = User & Info; let su:SuperUser; // 后续给变量赋值实际对象 su = { id: 1, name: "Alice", city: "New York" }; console.log(su); // 输出: { id: 1, name: 'Alice', city: 'New York' }
顺便提一句:交叉类型User & Info只是合并了两个类型的定义,让TypeScript知道su应该具备哪些属性,但它不会帮你自动创建对应的对象实例——对象的初始化还是得你自己来完成哦。
内容的提问来源于stack exchange,提问作者CaneRandagio
相关产品推荐
相关产品推荐

