bar?: string,
multiple?: false
}
type B = {
baz: number,
multiple: true
}
type BA = A | B;
const some = (value: BA) => {
return console.log(value);
}
some({ foo: 'test', baz: 2 })
а есть какой то способ сделать discriminated union по опциональному полю?
сейчас на some({ foo: 'test', baz: 2 }) тайпскрипт не ругается, хотя поидее не валидный объект
можно попробовать перегрузку сделать
- multiple?: false + multiple: false | undefined,
так в явном виде надо будет передавать multiple: undefined?
к сожалениею, да
для литералов объекта вроде же есть проверка на наличие поля в типе?
Очень даже валидный. В первом варианте кроме foo ничего не нужно, а baz в нагрузку к нему идёт. Тип неправильный 🤷♀
Можно Exclude сделать
не совсем понял что ты имеешь ввиду
Ну типа Exclude<T, U> в типе аргумента будет човпадать со всеми T, которые не U. Можно женериком и кондишеналами запретить кейс с foo и baz одновременно
Обсуждают сегодня