【发布时间】:2018-01-11 12:42:57
【问题描述】:
我有一个非常大的联合类型,其成员有多种类型,并且有一些重叠。实际上,这些都是非常大的数据库模式中的各种类型的记录属性。
type A = { x: number; y: number }
type B = { y: number; z: number }
// many many more types
type All =
| A
| B
// many many more types
我有一个非常通用的函数,它接受任何类型并根据某些属性的存在做一些事情。问题是我无法检查属性是否存在,因为 Typescript 会抛出错误,指出此联合中的某些类型没有该属性。但理想情况下,我可以检查是否存在,Typescript 会根据该属性的存在来推断类型...
function f(value: All) {
if (value.x) {
// value must be A or anything that has an x property
} else if (value.y) {
// value must be B or anything that has an x property
}
}
任何想法如何使这项工作?
【问题讨论】:
-
你不是在描述tagged union;这只是一个工会。
标签: typescript