Skip to content

Commit

Permalink
types: add ExcludeEnum utility for easier typings (#6746)
Browse files Browse the repository at this point in the history
Co-authored-by: Jan <66554238+vaporox@users.noreply.github.com>
  • Loading branch information
ImRodry and vaporoxx committed Oct 3, 2021
1 parent 32b5c2e commit 42acc6e
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 61 deletions.
26 changes: 26 additions & 0 deletions typings/enums.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,32 @@ export const enum ChannelTypes {
GUILD_STAGE_VOICE = 13,
}

export const enum MessageTypes {
DEFAULT,
RECIPIENT_ADD,
RECIPIENT_REMOVE,
CALL,
CHANNEL_NAME_CHANGE,
CHANNEL_ICON_CHANGE,
CHANNEL_PINNED_MESSAGE,
GUILD_MEMBER_JOIN,
USER_PREMIUM_GUILD_SUBSCRIPTION,
USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1,
USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2,
USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3,
CHANNEL_FOLLOW_ADD,
GUILD_DISCOVERY_DISQUALIFIED = 14,
GUILD_DISCOVERY_REQUALIFIED,
GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING,
GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING,
THREAD_CREATED,
REPLY,
APPLICATION_COMMAND,
THREAD_STARTER_MESSAGE,
GUILD_INVITE_REMINDER,
CONTEXT_MENU_COMMAND,
}

export const enum DefaultMessageNotificationLevels {
ALL_MESSAGES = 0,
ONLY_MENTIONS = 1,
Expand Down
75 changes: 14 additions & 61 deletions typings/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ import {
MembershipStates,
MessageButtonStyles,
MessageComponentTypes,
MessageTypes,
MFALevels,
NSFWLevels,
OverwriteTypes,
Expand Down Expand Up @@ -2290,6 +2291,8 @@ export class WelcomeScreen extends Base {

type EnumHolder<T> = { [P in keyof T]: T[P] };

type ExcludeEnum<T, K extends keyof T> = Exclude<keyof T | T[keyof T], K | T[K]>;

export const Constants: {
Package: {
name: string;
Expand Down Expand Up @@ -2900,7 +2903,7 @@ export type ActivitiesOptions = Omit<ActivityOptions, 'shardId'>;
export interface ActivityOptions {
name?: string;
url?: string;
type?: Exclude<ActivityType, 'CUSTOM'> | Exclude<ActivityTypes, ActivityTypes.CUSTOM>;
type?: ExcludeEnum<typeof ActivityTypes, 'CUSTOM'>;
shardId?: number | readonly number[];
}

Expand Down Expand Up @@ -3129,7 +3132,7 @@ export type ApplicationCommandData =

export interface ApplicationCommandChannelOptionData extends BaseApplicationCommandOptionsData {
type: CommandOptionChannelResolvableType;
channelTypes?: Exclude<keyof typeof ChannelTypes | ChannelTypes, 'UNKNOWN' | ChannelTypes.UNKNOWN>[];
channelTypes?: ExcludeEnum<typeof ChannelTypes, 'UNKNOWN'>[];
channel_types?: Exclude<ChannelTypes, ChannelTypes.UNKNOWN>[];
}

Expand Down Expand Up @@ -3313,22 +3316,15 @@ export type CacheWithLimitsOptions = {
export interface CategoryCreateChannelOptions {
permissionOverwrites?: OverwriteResolvable[] | Collection<Snowflake, OverwriteResolvable>;
topic?: string;
type?: Exclude<
keyof typeof ChannelTypes | ChannelTypes,
type?: ExcludeEnum<
typeof ChannelTypes,
| 'DM'
| 'GROUP_DM'
| 'UNKNOWN'
| 'GUILD_PUBLIC_THREAD'
| 'GUILD_NEWS_THREAD'
| 'GUILD_PRIVATE_THREAD'
| 'GUILD_CATEGORY'
| ChannelTypes.DM
| ChannelTypes.GROUP_DM
| ChannelTypes.UNKNOWN
| ChannelTypes.GUILD_PUBLIC_THREAD
| ChannelTypes.GUILD_NEWS_THREAD
| ChannelTypes.GUILD_PRIVATE_THREAD
| ChannelTypes.GUILD_CATEGORY
>;
nsfw?: boolean;
bitrate?: number;
Expand Down Expand Up @@ -3968,20 +3964,9 @@ export type GuildChannelResolvable = Snowflake | GuildChannel | ThreadChannel;

export interface GuildChannelCreateOptions extends Omit<CategoryCreateChannelOptions, 'type'> {
parent?: CategoryChannelResolvable;
type?: Exclude<
keyof typeof ChannelTypes | ChannelTypes,
| 'DM'
| 'GROUP_DM'
| 'UNKNOWN'
| 'GUILD_PUBLIC_THREAD'
| 'GUILD_NEWS_THREAD'
| 'GUILD_PRIVATE_THREAD'
| ChannelTypes.DM
| ChannelTypes.GROUP_DM
| ChannelTypes.UNKNOWN
| ChannelTypes.GUILD_PUBLIC_THREAD
| ChannelTypes.GUILD_NEWS_THREAD
| ChannelTypes.GUILD_PRIVATE_THREAD
type?: ExcludeEnum<
typeof ChannelTypes,
'DM' | 'GROUP_DM' | 'UNKNOWN' | 'GUILD_PUBLIC_THREAD' | 'GUILD_NEWS_THREAD' | 'GUILD_PRIVATE_THREAD'
>;
}

Expand Down Expand Up @@ -4308,7 +4293,7 @@ export interface LinkButtonOptions extends BaseButtonOptions {
}

export interface InteractionButtonOptions extends BaseButtonOptions {
style: Exclude<MessageButtonStyleResolvable, 'LINK' | MessageButtonStyles.LINK>;
style: ExcludeEnum<typeof MessageButtonStyles, 'LINK'>;
customId: string;
}

Expand Down Expand Up @@ -4506,30 +4491,7 @@ export type MessageTarget =
| Message
| MessageManager;

export type MessageType =
| 'DEFAULT'
| 'RECIPIENT_ADD'
| 'RECIPIENT_REMOVE'
| 'CALL'
| 'CHANNEL_NAME_CHANGE'
| 'CHANNEL_ICON_CHANGE'
| 'CHANNEL_PINNED_MESSAGE'
| 'GUILD_MEMBER_JOIN'
| 'USER_PREMIUM_GUILD_SUBSCRIPTION'
| 'USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1'
| 'USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2'
| 'USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3'
| 'CHANNEL_FOLLOW_ADD'
| 'GUILD_DISCOVERY_DISQUALIFIED'
| 'GUILD_DISCOVERY_REQUALIFIED'
| 'GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING'
| 'GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING'
| 'THREAD_CREATED'
| 'REPLY'
| 'APPLICATION_COMMAND'
| 'THREAD_STARTER_MESSAGE'
| 'GUILD_INVITE_REMINDER'
| 'CONTEXT_MENU_COMMAND';
export type MessageType = keyof typeof MessageTypes;

export type MFALevel = keyof typeof MFALevels;

Expand Down Expand Up @@ -4631,8 +4593,8 @@ export type PresenceResolvable = Presence | UserResolvable | Snowflake;
export interface PartialChannelData {
id?: Snowflake | number;
parentId?: Snowflake | number;
type?: Exclude<
keyof typeof ChannelTypes | ChannelTypes,
type?: ExcludeEnum<
typeof ChannelTypes,
| 'DM'
| 'GROUP_DM'
| 'GUILD_NEWS'
Expand All @@ -4642,15 +4604,6 @@ export interface PartialChannelData {
| 'GUILD_PUBLIC_THREAD'
| 'GUILD_PRIVATE_THREAD'
| 'GUILD_STAGE_VOICE'
| ChannelTypes.DM
| ChannelTypes.GROUP_DM
| ChannelTypes.GUILD_NEWS
| ChannelTypes.GUILD_STORE
| ChannelTypes.UNKNOWN
| ChannelTypes.GUILD_NEWS_THREAD
| ChannelTypes.GUILD_PUBLIC_THREAD
| ChannelTypes.GUILD_PRIVATE_THREAD
| ChannelTypes.GUILD_STAGE_VOICE
>;
name: string;
topic?: string;
Expand Down

0 comments on commit 42acc6e

Please sign in to comment.