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