typescript - 如何从基本类型扩展两种类型?
问题描述
我有两种类型和一种基本类型。基本类型实际上应该是一个抽象类型,但我不确定它应该被称为什么的相关术语。
基本类型
type Base = {
color: string
distance: number
}
type A = {
size: string
}
type B = {
rotation: number
}
我希望 A 和 B 类型都扩展 Base 类型。基本类型永远不应该单独使用,将来可能存在类型 C。我知道对于类,我可以声明一个抽象基类,然后从它扩展,但我希望尽可能避免这种情况。
我认为使用接口可以做到这一点,但我不希望有人实现 Base 类型,因为它不是有效类型,我想防止这种情况发生。
解决方案
只是不要导出
Base
类型。我添加了带
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 - 你不能有任何保证
推荐阅读
- android - 如何在 onBindViewHolder 中获取 RecyclerView 单元格的高度/宽度?
- java - 从线程池线程调用api时如何测量api的响应时间。(java spring boot)
- angular - 无法从 Mac 卸载 CLI
- javascript - 如何在 JavaScript 中创建 RTMP 视频编码器
- python - 通过将 Channels 添加到 settings.py INSTALLED_APPS 导致 Django 错误
- excel - 输出填充在下一行中,并且不会覆盖 VBA 循环过程中的现有行
- python - Python客户端套接字不会从另一台机器连接到服务器?
- javascript - 当在频道中发送消息时,Discord 机器人会给人一个角色
- flutter - 如何在 Flutter 中构建多个 UI 与一个项目略有不同的应用程序
- c++ - 返回类型为 ostream& 的函数的返回类型