TypeScript Interface属性可用联合类型?与课程描述冲突存疑
关于TypeScript Interface与联合类型的疑问解答
你的理解存在一处小偏差,咱们拆解开说清楚:
Interface的核心是定义对象的结构类型
课程里说Interface用来定义“对象类型”是没错的,但这里的“对象类型”指的是整个interface描述的是一个对象的形状,而非要求interface里的每个属性都必须是对象类型。Interface的作用是约束对象的键和对应值的类型,属性值可以是任意合法的TypeScript类型——包括基本类型、联合类型、甚至另一个interface定义的对象类型。联合类型完全可以作为Interface属性的类型
比如你看到的React示例:interface Props { title: string | number; // 其他属性... } function MyComponent(props: Props) { return <div>{props.title}</div>; }这段代码完全合法,因为
Props本身是一个对象类型(描述组件接收的props对象结构),而title属性用联合类型限定它可以是字符串或数字,这和Interface的定义逻辑并不冲突。课程表述的补充说明
课程说“string | number这类联合类型不属于对象类型”是正确的——联合类型本身是多个类型的集合,确实不是对象类型。但Interface是包裹这些属性的“容器”,整个容器属于对象类型,内部属性则可以用任意类型,包括联合类型。
简单总结:Interface负责定义对象的整体结构,对象内部的每个属性可以使用任意TypeScript类型,包括联合类型,两者并不矛盾。
内容的提问来源于stack exchange,提问作者Tun Huang
相关产品推荐
相关产品推荐

