Interface de texto datilografado - É possível criar propriedades “uma ou outra” necessárias?

Possivelmente uma pergunta estranha, mas estou curioso para saber se é possível criar uma interface em que uma propriedade ou outra seja necessária.

Então, por exemplo ...

interface Message {
    text: string;
    attachment: Attachment;
    timestamp?: number;
    // ...etc
}

interface Attachment {...}

No caso acima, eu gostaria de ter certeza de quetext ouattachment existe.

Espero que isso faça sentido.

Desde já, obrigado!

Editar: É assim que estou fazendo agora. Pensei que era um pouco detalhado (digitando botkit por folga).

interface Message {
    type?: string;
    channel?: string;
    user?: string;
    text?: string;
    attachments?: Slack.Attachment[];
    ts?: string;
    team?: string;
    event?: string;
    match?: [string, {index: number}, {input: string}];
}

interface AttachmentMessageNoContext extends Message {
    channel: string;
    attachments: Slack.Attachment[];
}

interface TextMessageNoContext extends Message {
    channel: string;
    text: string;
}

questionAnswers(2)

yourAnswerToTheQuestion