diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 0e23ba39e..e69c7b3b0 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -6161,15 +6161,17 @@ export interface PartialChannelData { export type Partialize< T extends AllowedPartial, - N extends keyof T | null = null, - M extends keyof T | null = null, - E extends keyof T | '' = '', + NulledKeys extends keyof T | null = null, + NullableKeys extends keyof T | null = null, + OverridableKeys extends keyof T | '' = '', > = { - readonly client: Client; - id: Snowflake; - partial: true; -} & { - [K in keyof Omit]: K extends N ? null : K extends M ? T[K] | null : T[K]; + [K in keyof Omit]: K extends 'partial' + ? true + : K extends NulledKeys + ? null + : K extends NullableKeys + ? T[K] | null + : T[K]; }; export interface PartialDMChannel extends Partialize { diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index 3f77396d5..a44e8805f 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -177,6 +177,10 @@ import { StringSelectMenuComponentData, ButtonComponentData, MediaChannel, + PartialDMChannel, + PartialGuildMember, + PartialMessage, + PartialMessageReaction, } from '.'; import { expectAssignable, expectNotAssignable, expectNotType, expectType } from 'tsd'; import type { ContextMenuCommandBuilder, SlashCommandBuilder } from '@discordjs/builders'; @@ -2323,3 +2327,39 @@ expectType>(guildMember.flags); const onboarding = await guild.fetchOnboarding(); expectType(onboarding); } + +declare const partialDMChannel: PartialDMChannel; +expectType(partialDMChannel.partial); +expectType(partialDMChannel.lastMessageId); + +declare const partialGuildMember: PartialGuildMember; +expectType(partialGuildMember.partial); +expectType(partialGuildMember.joinedAt); +expectType(partialGuildMember.joinedTimestamp); +expectType(partialGuildMember.pending); + +declare const partialMessage: PartialMessage; +expectType(partialMessage.partial); +expectType(partialMessage.type); +expectType(partialMessage.system); +expectType(partialMessage.pinned); +expectType(partialMessage.tts); +expectAssignable(partialMessage.content); +expectAssignable(partialMessage.cleanContent); +expectAssignable(partialMessage.author); + +declare const partialMessageReaction: PartialMessageReaction; +expectType(partialMessageReaction.partial); +expectType(partialMessageReaction.count); + +declare const partialThreadMember: PartialThreadMember; +expectType(partialThreadMember.partial); +expectType(partialThreadMember.flags); +expectType(partialThreadMember.joinedAt); +expectType(partialThreadMember.joinedTimestamp); + +declare const partialUser: PartialUser; +expectType(partialUser.partial); +expectType(partialUser.username); +expectType(partialUser.tag); +expectType(partialUser.discriminator);