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

TypeScript:类与接口联合类型疑问——为何可声明未定义属性?

TypeScript类/接口联合类型创建及相关问题解答

一、如何创建类或接口的联合类型

在TypeScript中,用type关键字配合竖线|就能把类、接口、基础类型组合成联合类型,语法简单直接:

// 定义类和接口
class Type1 {
  value: string | symbol;
  constructor(value: string | symbol) {
    this.value = value;
  }
}

interface Type2 {
  name: string;
  use: boolean;
}

// 创建联合类型:包含字符串、Type1类实例、Type2接口对象
type Token = string | Type1 | Type2;

联合类型意味着变量的类型可以是|分隔的任意一种类型。

二、为什么Type2接口对象能添加额外的value属性

这是因为TypeScript采用结构类型系统,判断类型兼容性只看结构是否匹配,不看类型名称。

你的代码里,Token是string | Type1 | Type2的联合类型,当你把{name: "token", use: true, value: "value"}赋值给token变量时,TypeScript会检查这个对象是否符合联合类型中至少一个成员的结构要求:

  • 这个对象拥有name和use属性,完全匹配Type2接口的结构,所以它属于Type2类型,能被赋值给Token类型变量。
  • 额外的value属性不会触发错误,因为结构类型系统只要求对象满足目标类型的必要属性,允许存在额外属性(除非用Exact<Type2>这类工具类型强制限制精确结构)。

内容的提问来源于stack exchange,提问作者Meslzy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:27:37