Então eu tenho esse tipo de união marcado:
type A = {
type: 'a';
attr1: number;
};
type B = {
type: 'b';
attr1: string;
attr2: boolean;
};
type C = {
type: 'c';
attr5: object;
attr6: boolean;
};
type U = A | B | C;
Quero ter um objeto parcial desse tipo. Então tentei usar parcial:
type PartialU = Partial<U>;
Mas isso representa um problema, pois o type
atributo também está marcado como opcional:
type PartialU = Partial<U>;
// ^?
// {
// type?: 'a';
// attr1?: number;
// } | {
// type?: 'b';
// attr1?: string;
// attr2?: boolean;
// } | {
// type?: 'c';
// attr5?: object;
// attr6?: boolean;
// }
Isso faz com que o sindicato marcado não seja mais marcado, pois os valores não são exclusivos de cada alternativa, pois qualquer um deles pode ser indefinido, anulando o propósito do sindicato.
Eu preferiria um tipo como este:
{
type: 'a';
attr1?: number;
} | {
type: 'b';
attr1?: string;
attr2?: boolean;
} | {
type: 'c';
attr5?: object;
attr6?: boolean;
}
Existe uma maneira óbvia de conseguir isso?