types: add ExcludeEnum utility for easier typings (#6746)

Co-authored-by: Jan <66554238+vaporox@users.noreply.github.com>
This commit is contained in:
Rodry
2021-10-03 21:54:43 +01:00
committed by GitHub
parent 32b5c2e617
commit 42acc6eef9
2 changed files with 40 additions and 61 deletions

26
typings/enums.d.ts vendored
View File

@@ -49,6 +49,32 @@ export const enum ChannelTypes {
GUILD_STAGE_VOICE = 13, 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 { export const enum DefaultMessageNotificationLevels {
ALL_MESSAGES = 0, ALL_MESSAGES = 0,
ONLY_MENTIONS = 1, ONLY_MENTIONS = 1,

75
typings/index.d.ts vendored
View File

@@ -66,6 +66,7 @@ import {
MembershipStates, MembershipStates,
MessageButtonStyles, MessageButtonStyles,
MessageComponentTypes, MessageComponentTypes,
MessageTypes,
MFALevels, MFALevels,
NSFWLevels, NSFWLevels,
OverwriteTypes, OverwriteTypes,
@@ -2290,6 +2291,8 @@ export class WelcomeScreen extends Base {
type EnumHolder<T> = { [P in keyof T]: T[P] }; 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: { export const Constants: {
Package: { Package: {
name: string; name: string;
@@ -2900,7 +2903,7 @@ export type ActivitiesOptions = Omit<ActivityOptions, 'shardId'>;
export interface ActivityOptions { export interface ActivityOptions {
name?: string; name?: string;
url?: string; url?: string;
type?: Exclude<ActivityType, 'CUSTOM'> | Exclude<ActivityTypes, ActivityTypes.CUSTOM>; type?: ExcludeEnum<typeof ActivityTypes, 'CUSTOM'>;
shardId?: number | readonly number[]; shardId?: number | readonly number[];
} }
@@ -3129,7 +3132,7 @@ export type ApplicationCommandData =
export interface ApplicationCommandChannelOptionData extends BaseApplicationCommandOptionsData { export interface ApplicationCommandChannelOptionData extends BaseApplicationCommandOptionsData {
type: CommandOptionChannelResolvableType; type: CommandOptionChannelResolvableType;
channelTypes?: Exclude<keyof typeof ChannelTypes | ChannelTypes, 'UNKNOWN' | ChannelTypes.UNKNOWN>[]; channelTypes?: ExcludeEnum<typeof ChannelTypes, 'UNKNOWN'>[];
channel_types?: Exclude<ChannelTypes, ChannelTypes.UNKNOWN>[]; channel_types?: Exclude<ChannelTypes, ChannelTypes.UNKNOWN>[];
} }
@@ -3313,8 +3316,8 @@ export type CacheWithLimitsOptions = {
export interface CategoryCreateChannelOptions { export interface CategoryCreateChannelOptions {
permissionOverwrites?: OverwriteResolvable[] | Collection<Snowflake, OverwriteResolvable>; permissionOverwrites?: OverwriteResolvable[] | Collection<Snowflake, OverwriteResolvable>;
topic?: string; topic?: string;
type?: Exclude< type?: ExcludeEnum<
keyof typeof ChannelTypes | ChannelTypes, typeof ChannelTypes,
| 'DM' | 'DM'
| 'GROUP_DM' | 'GROUP_DM'
| 'UNKNOWN' | 'UNKNOWN'
@@ -3322,13 +3325,6 @@ export interface CategoryCreateChannelOptions {
| 'GUILD_NEWS_THREAD' | 'GUILD_NEWS_THREAD'
| 'GUILD_PRIVATE_THREAD' | 'GUILD_PRIVATE_THREAD'
| 'GUILD_CATEGORY' | '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; nsfw?: boolean;
bitrate?: number; bitrate?: number;
@@ -3968,20 +3964,9 @@ export type GuildChannelResolvable = Snowflake | GuildChannel | ThreadChannel;
export interface GuildChannelCreateOptions extends Omit<CategoryCreateChannelOptions, 'type'> { export interface GuildChannelCreateOptions extends Omit<CategoryCreateChannelOptions, 'type'> {
parent?: CategoryChannelResolvable; parent?: CategoryChannelResolvable;
type?: Exclude< type?: ExcludeEnum<
keyof typeof ChannelTypes | ChannelTypes, typeof ChannelTypes,
| 'DM' 'DM' | 'GROUP_DM' | 'UNKNOWN' | 'GUILD_PUBLIC_THREAD' | 'GUILD_NEWS_THREAD' | 'GUILD_PRIVATE_THREAD'
| '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
>; >;
} }
@@ -4308,7 +4293,7 @@ export interface LinkButtonOptions extends BaseButtonOptions {
} }
export interface InteractionButtonOptions extends BaseButtonOptions { export interface InteractionButtonOptions extends BaseButtonOptions {
style: Exclude<MessageButtonStyleResolvable, 'LINK' | MessageButtonStyles.LINK>; style: ExcludeEnum<typeof MessageButtonStyles, 'LINK'>;
customId: string; customId: string;
} }
@@ -4506,30 +4491,7 @@ export type MessageTarget =
| Message | Message
| MessageManager; | MessageManager;
export type MessageType = export type MessageType = keyof typeof 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'
| '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 MFALevel = keyof typeof MFALevels; export type MFALevel = keyof typeof MFALevels;
@@ -4631,8 +4593,8 @@ export type PresenceResolvable = Presence | UserResolvable | Snowflake;
export interface PartialChannelData { export interface PartialChannelData {
id?: Snowflake | number; id?: Snowflake | number;
parentId?: Snowflake | number; parentId?: Snowflake | number;
type?: Exclude< type?: ExcludeEnum<
keyof typeof ChannelTypes | ChannelTypes, typeof ChannelTypes,
| 'DM' | 'DM'
| 'GROUP_DM' | 'GROUP_DM'
| 'GUILD_NEWS' | 'GUILD_NEWS'
@@ -4642,15 +4604,6 @@ export interface PartialChannelData {
| 'GUILD_PUBLIC_THREAD' | 'GUILD_PUBLIC_THREAD'
| 'GUILD_PRIVATE_THREAD' | 'GUILD_PRIVATE_THREAD'
| 'GUILD_STAGE_VOICE' | '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; name: string;
topic?: string; topic?: string;