# I would, yes. I would do it with types like this type C = { sameField: string; } type A = C & { fieldInA: string; discriminator: "A"; } type B = C & { fieldInB: string; discriminator: "B"; } Other option isto use interfaces