Hello, I want to make a dynamic type depending on the "ModerationActionType". Because some have properties some don't have. For example "Mute" has duration. This is my current solution, I know that there is a better way but I don't know how to do it.
export enum ModerationActionType {
Ban = "BAN",
Kick = "KICK",
Mute = "MUTE",
Warn = "WARN",
Unban = "UNBAN",
Unmute = "UNMUTE",
Unwarn = "UNWARN"
}
export type ModerationAction = {
type: ModerationActionType;
createdAt: Date;
guildId: string;
moderatorId: string;
targetId: string;
reason: string;
duration: number | null;
};
export type BaseModerationCreateOptions = Omit<ModerationAction, "createdAt" | "duration">;
export type ModerationActionBan = BaseModerationCreateOptions & {
type: ModerationActionType.Ban;
};
export type ModerationActionKick = BaseModerationCreateOptions & {
type: ModerationActionType.Kick;
};
export type ModerationActionMute = BaseModerationCreateOptions & {
type: ModerationActionType.Mute;
duration: number;
};
export type ModerationActionWarn = BaseModerationCreateOptions & {
type: ModerationActionType.Warn;
};
export type ModerationActionUnban = BaseModerationCreateOptions & {
type: ModerationActionType.Unban;
};
export type ModerationActionUnmute = BaseModerationCreateOptions & {
type: ModerationActionType.Unmute;
};
export type ModerationActionUnwarn = BaseModerationCreateOptions & {
type: ModerationActionType.Unwarn;
};
export type ModerationActionCreateOptions =
| ModerationActionBan
| ModerationActionKick
| ModerationActionMute
| ModerationActionWarn
| ModerationActionUnban
| ModerationActionUnmute
| ModerationActionUnwarn;
async function createModerationAction(data: ModerationActionCreateOptions): Promise<void> {
console.log(data);
}
you could actually just put this on