How to convert interface to discriminated union?

  Kiến thức lập trình

I am trying to convert simple interface to discriminated union type but there is some problem with the union type property. Here is a basic example. The whole code can be found here.

The type property is the same but I get:

Types of property 'type' are incompatible.
enum MessageTypes {     
Text = 1,     
Media,     
AccessRequest, 
}

Convert this

interface MessageApiResponse {
id: number
type: MessageTypes
content: string | MediaContentApiResponse | AccessRequestContentApiResponse
chat_id: number
}

interface MediaContentApiResponse {
mime_type: string,
url: string
}

interface AccessRequestContentApiResponse {
sender: User
receiver: User
status: AccessRequestContentStatuses
}

to this

type MessageBase = Omit<MessageEntityCache, "type" | "content"> & {
isAuthor: boolean
};

interface MessageText {
type: MessageTypes.Text
content: string
}

interface MessageAccessRequestAuthor {
type: MessageTypes.AccessRequest
content: AccessRequestContentAuthor
isAuthor: true
}

interface MessageAccessRequestNotAuthor {
type: MessageTypes.AccessRequest
content: AccessRequestContentNotAuthor
isAuthor: false
}

type MessageAccessRequest = MessageAccessRequestAuthor | MessageAccessRequestNotAuthor

interface MessageMedia {
type: MessageTypes.Media;
content: MediaContentEntityCache;
}

type Message = MessageBase & (MessageText | MessageAccessRequest | MessageMedia);

New contributor

Stanislav Jordanov is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

LEAVE A COMMENT