You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 11:57:43