Юнион это или, тебе видимо нужно &
нет, я хочу именно "или", а он воспринимает как "и"
Аааа он не ругается, я тебя не понял прост
type T1 = {name: string; age?: never} | {age: number; name?: never};
а если 100 полей, каждому never писать?
но по-хорошему, тебе надо разбить на два типа A = {name: string} B = {age: number} T = A | B и уже const x: A или B
type A = | { tag: 'Foo', foo: string } | { tag: 'Bar', bar: number }
Результат тот же с разбиением, ошибки нет.
вот если мне нужен тип, который отвечает строго либо объекту {name: string} либо {age: number}, как мне написать это?
Если выяснишь, отпишись пожалуйста
Выше уже привели ответ с never, а чтобы не писать их вручную, можно использовать хелпер: play. Но лучше и проще решение с уникальным полем (например, tag) у каждого объекта, так как TS под это специально "заточен": discriminating unions.
Обсуждают сегодня