Доки по разработке
This project is maintained by teniryte
OneOf и взаимоисключающие свойстваПринципы
OneOf гарантирует, что объект содержит ровно один из указанных ключей (draftId или dbId).undefined, когда активировано другое.Пример
import { OneOf } from 'ts-cookbook';
interface UnsavedRecord {
name: string;
age: number;
}
type DbRecord = UnsavedRecord &
OneOf<{
draftId: string;
dbId: string;
}>;
const record: DbRecord = {} as any;
if (record.dbId) {
record.draftId; // тип: draftId?: undefined
}
Практика
OneOf для форм, где запись может быть либо черновиком, либо сохранённой сущностью.undefined.