From 7422d9f172019fd5fbe93051512929506b122f93 Mon Sep 17 00:00:00 2001 From: Jan Parisek <64596848+janparisek@users.noreply.github.com> Date: Tue, 10 Oct 2023 15:39:28 +0200 Subject: [PATCH] types(Partials): add toString() method to supported Partials (#9835) * types(Partials): add toString() method to supported Partials - includes `PartialDMChannel`, `PartialGuildMember` and `PartialUser` - does not include - `PartialMessage`, since `.content` is always null - `PartialMessageReaction`, since `MessageReaction` has no `toString()` method - `PartialThreadMember`, since `ThreadMember` has no `toString()` method * types(Partials): replace type of `toString()` methods with return type * test(Partials): add tests * types(Partialize): refactor Partialize * test(PartialThreadMember): fix typo * types(Partials): clean up unnecessary type overrides * test(Partials): add tests for .partial property --------- Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com> --- packages/discord.js/typings/index.d.ts | 18 +++++----- packages/discord.js/typings/index.test-d.ts | 40 +++++++++++++++++++++ 2 files changed, 50 insertions(+), 8 deletions(-) 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);