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

TypeScript中父interface是否可获取子interface的属性?

问题结论

你给出的代码写法不符合TypeScript语法规则,执行编译时会直接抛出类型错误。


具体原因说明

  • TypeScript针对直接赋值的对象字面量有严格的「额外属性检查」规则:当你直接把一个对象字面量赋值给标注了明确类型的变量时,TS会校验对象字面量的所有属性是否都存在于标注的类型定义中,只要出现未定义的属性就会报错。你示例中interface A没有定义author属性,直接给标注为A的book常量传带author的对象字面量,会触发报错:对象字面量只能指定已知属性,并且“author”不存在于类型“A”中。
  • 子接口继承父接口后,子类型本身是符合父类型的结构要求的(包含父类型的全部属性),所以如果是先声明子类型的变量,再赋值给父类型的变量,是完全合法的,不会触发报错,示例如下:
interface A {
  title: string;
  id: string;
}

interface B extends A {
  author: string;
}

// 先声明B类型的变量
const bBook: B = {
  title: 'my title',
  id: '1',
  author: 'author'
}
// 赋值给A类型的变量,合法
const book: A = bBook
  • 另外父接口的定义是独立的,不会自动继承子接口的属性,如果你需要复用子接口的属性给父类型使用,可以用交叉类型实现,比如要得到一个同时包含A的属性和B的author属性的类型,可以写:type AWithAuthor = A & Pick<B, 'author'>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:57:03