Interfaz mecanografiada: ¿es posible hacer que se requieran las propiedades "una u otra"?

Posiblemente una pregunta extraña, pero tengo curiosidad por saber si es posible hacer una interfaz donde se requiere una propiedad u otra.

Así por ejemplo...

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

interface Attachment {...}

En el caso anterior, me gustaría asegurarme de quetext oattachment existe

Ojalá eso tenga sentido.

¡Gracias por adelantado!

Editar: Así es como lo estoy haciendo ahora. Pensé que era un poco detallado (escribiendo botkit para holgura).

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;
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta