首页 > 解决方案 > 如何从基本类型扩展两种类型?

问题描述

我有两种类型和一种基本类型。基本类型实际上应该是一个抽象类型,但我不确定它应该被称为什么的相关术语。

基本类型

type Base = { 
   color: string
   distance: number
}

type A = {
   size: string
}

type B = {
   rotation: number
}

我希望 A 和 B 类型都扩展 Base 类型。基本类型永远不应该单独使用,将来可能存在类型 C。我知道对于类,我可以声明一个抽象基类,然后从它扩展,但我希望尽可能避免这种情况。

我认为使用接口可以做到这一点,但我不希望有人实现 Base 类型,因为它不是有效类型,我想防止这种情况发生。

标签: typescript

解决方案


  1. 只是不要导出Base类型。

  2. 我添加了带never类型的属性,所以不允许任何人使用Base纯类型

type Base = {
  color: string,
  distance: number,
  prevent: never,
}

export type A = Omit<Base, 'prevent'> & {
  size: string
}

export type B = Omit<Base, 'prevent'> & {
  rotation: number
}

// error, prevent property missing
// nobody can't create a variable with pure Base type
const x: Base = {
  color: 's',
  distance: 2
}

const y: A = {
  color: 's',
  distance: 2,
  size: 'm',
} //ok


const z: B = {
  color: 's',
  distance: 2,
  rotation: 90
} //ok

对你起作用吗?

我只是无法想象其他限制

您还可以Base在 eslint 配置中添加禁止名称

我同意@VLAZ 和@jcalz - 你不能有任何保证


推荐阅读