У меня действительно большой тип объединения с членами, которые имеют множество типов с некоторыми перекрытиями. На практике это все различные типы свойств записи в действительно большой схеме базы данных.
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
}
}
Есть идеи, как это сделать?