Взаимоисключающие свойства типа typescript

Есть ли возможность в ts указать, что у объекта может быть только одно из перечисленных свойств ("aaa", "bbb" или "ccc")? Нашёл способ сделать подобное с помощью дополнительного свойства, но хотелось бы обойтись без него:

type TestType = {aaa: string, type: 'a'} | {bbb: string, type: 'b'};

--

Если просто написать

type TestType = {aaa: string} | {bbb: string};

То ts примет такойобъект как валидный

const test: TestType = {aaa: '123', bbb: '456'};

Задача состоит в том, чтобы объект

const test: TestType

мог быть либо

{aaa: '123'}

либо

{bbb: '456'}

но точно не

{aaa: '123', bbb: '456'}

Ответы (1 шт):

Автор решения: Qwertiy
type TestType = {
  aaa: string;
  bbb?: never;
} | {
  aaa?: never;
  bbb: string;
};
→ Ссылка