нескольких свойств, и при этом чтобы можно было в функции разобраться, что именно было передано?
Если сделать просто union нескольких интерфейсов, это не мешает передать в функцию объект со сразу несколькими полями, но в функции норм работают тайпгарды через in.
Если сделать union из интерфейсов, где поля, которые нельзя передавать при наличии какого-то поля, помечать как ?: never, то передать объект с несколькими полями действительно нельзя, но внутри функции через in не получается проверить, что именно было передано.
Демо: https://bit.ly/3hGHwR5
а вот такой вариант не пойдет? https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgILIN4Chm+WATwAcIAuZAclQoG4c85yAjAexYBsI4Q6BfLLKEixEKAEKZ6uQiXIUxtKcibM2nbnwEyUqCQF40yAD7IxdLDACuIBGGAsQyGI4AUcKAHNyugJSS8yMAwyG6eAHTayHrRlNR+2AEBCA4AzhwQYewsHqEeYUw+NMgA9MXIgHwggGwggBwggCwggAwggHIgFYASINWAjCCAXCCAwiBK-PwWIC4YjPhQlhAANMrkYOMQvIUlZeVtXfXT5Z1YQA
Обсуждают сегодня