From 250619685f15bdf87e59c0b5af59cd5d7faa72d2 Mon Sep 17 00:00:00 2001 From: Jan Parisek <64596848+janparisek@users.noreply.github.com> Date: Fri, 15 Sep 2023 04:38:51 +0200 Subject: [PATCH 1/7] 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 --- packages/discord.js/typings/index.d.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index c94e415b06c7..dfdd12fa92f4 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -6115,11 +6115,15 @@ export type Partialize< [K in keyof Omit]: K extends N ? null : K extends M ? T[K] | null : T[K]; }; -export interface PartialDMChannel extends Partialize { +export interface PartialDMChannel extends Partialize { lastMessageId: undefined; + toString(): UserMention; } -export interface PartialGuildMember extends Partialize {} +export interface PartialGuildMember + extends Partialize { + toString(): UserMention; +} export interface PartialMessage extends Partialize {} @@ -6149,7 +6153,9 @@ export enum Partials { ThreadMember, } -export interface PartialUser extends Partialize {} +export interface PartialUser extends Partialize { + toString(): UserMention; +} export type PresenceStatusData = ClientPresenceStatus | 'invisible'; From eb30a33d873bb7a9abd56ccdae1bc51d4ee51006 Mon Sep 17 00:00:00 2001 From: Jan Parisek <64596848+janparisek@users.noreply.github.com> Date: Fri, 15 Sep 2023 23:05:06 +0200 Subject: [PATCH 2/7] types(Partials): replace type of `toString()` methods with return type --- packages/discord.js/typings/index.d.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 7aeec4191f36..0b27da28adc3 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -6120,12 +6120,12 @@ export type Partialize< export interface PartialDMChannel extends Partialize { lastMessageId: undefined; - toString(): UserMention; + toString(): ReturnType; } export interface PartialGuildMember extends Partialize { - toString(): UserMention; + toString(): ReturnType; } export interface PartialMessage @@ -6157,7 +6157,7 @@ export enum Partials { } export interface PartialUser extends Partialize { - toString(): UserMention; + toString(): ReturnType; } export type PresenceStatusData = ClientPresenceStatus | 'invisible'; From 8c1f8af07db21f05124fe90a5585f7bff82c878a Mon Sep 17 00:00:00 2001 From: Jan Parisek <64596848+janparisek@users.noreply.github.com> Date: Fri, 15 Sep 2023 23:07:56 +0200 Subject: [PATCH 3/7] test(Partials): add tests --- packages/discord.js/typings/index.test-d.ts | 37 +++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index 026e2f80794a..fb60bc93eb24 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -176,6 +176,10 @@ import { GuildOnboarding, StringSelectMenuComponentData, ButtonComponentData, + PartialDMChannel, + PartialGuildMember, + PartialMessage, + PartialMessageReaction, } from '.'; import { expectAssignable, expectNotAssignable, expectNotType, expectType } from 'tsd'; import type { ContextMenuCommandBuilder, SlashCommandBuilder } from '@discordjs/builders'; @@ -2315,3 +2319,36 @@ expectType>(guildMember.flags); const onboarding = await guild.fetchOnboarding(); expectType(onboarding); } + +declare const partialDMChannel: PartialDMChannel; +expectType(partialDMChannel.lastMessageId); +expectType>(partialDMChannel.toString()); + +declare const partialGuildMember: PartialGuildMember; +expectType(partialGuildMember.joinedAt); +expectType(partialGuildMember.joinedTimestamp); +expectType(partialGuildMember.pending); +expectType>(partialGuildMember.toString()); + +declare const partialMessage: PartialMessage; +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.count); + +declare const partialThreadMeber: PartialThreadMember; +expectType(partialThreadMeber.flags); +expectType(partialThreadMeber.joinedAt); +expectType(partialThreadMeber.joinedTimestamp); + +declare const partialUser: PartialUser; +expectType(partialUser.username); +expectType(partialUser.tag); +expectType(partialUser.discriminator); +expectType>(partialUser.toString()); From 2f17efec76f9477fe86da5a9b2b01683951695e4 Mon Sep 17 00:00:00 2001 From: Jan Parisek <64596848+janparisek@users.noreply.github.com> Date: Fri, 15 Sep 2023 23:14:14 +0200 Subject: [PATCH 4/7] types(Partialize): refactor Partialize --- packages/discord.js/typings/index.d.ts | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 0b27da28adc3..0207545f8566 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -6107,15 +6107,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 { From bf9fc24b5b3b57c387451822cb3ddd82ea406c8a Mon Sep 17 00:00:00 2001 From: Jan Parisek <64596848+janparisek@users.noreply.github.com> Date: Mon, 18 Sep 2023 17:12:14 +0200 Subject: [PATCH 5/7] test(PartialThreadMember): fix typo --- packages/discord.js/typings/index.test-d.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index fb60bc93eb24..0545e23c24b0 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -2342,10 +2342,10 @@ expectAssignable(partialMessage.author); declare const partialMessageReaction: PartialMessageReaction; expectType(partialMessageReaction.count); -declare const partialThreadMeber: PartialThreadMember; -expectType(partialThreadMeber.flags); -expectType(partialThreadMeber.joinedAt); -expectType(partialThreadMeber.joinedTimestamp); +declare const partialThreadMember: PartialThreadMember; +expectType(partialThreadMember.flags); +expectType(partialThreadMember.joinedAt); +expectType(partialThreadMember.joinedTimestamp); declare const partialUser: PartialUser; expectType(partialUser.username); From bbe4e2dbcb281e23e726cbef02baf4175b907b62 Mon Sep 17 00:00:00 2001 From: Jan Parisek <64596848+janparisek@users.noreply.github.com> Date: Mon, 18 Sep 2023 17:17:48 +0200 Subject: [PATCH 6/7] types(Partials): clean up unnecessary type overrides --- packages/discord.js/typings/index.d.ts | 12 +++--------- packages/discord.js/typings/index.test-d.ts | 3 --- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 0207545f8566..436c5057358e 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -6120,15 +6120,11 @@ export type Partialize< : T[K]; }; -export interface PartialDMChannel extends Partialize { +export interface PartialDMChannel extends Partialize { lastMessageId: undefined; - toString(): ReturnType; } -export interface PartialGuildMember - extends Partialize { - toString(): ReturnType; -} +export interface PartialGuildMember extends Partialize {} export interface PartialMessage extends Partialize {} @@ -6158,9 +6154,7 @@ export enum Partials { ThreadMember, } -export interface PartialUser extends Partialize { - toString(): ReturnType; -} +export interface PartialUser extends Partialize {} export type PresenceStatusData = ClientPresenceStatus | 'invisible'; diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index 0545e23c24b0..25fd2393b2de 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -2322,13 +2322,11 @@ expectType>(guildMember.flags); declare const partialDMChannel: PartialDMChannel; expectType(partialDMChannel.lastMessageId); -expectType>(partialDMChannel.toString()); declare const partialGuildMember: PartialGuildMember; expectType(partialGuildMember.joinedAt); expectType(partialGuildMember.joinedTimestamp); expectType(partialGuildMember.pending); -expectType>(partialGuildMember.toString()); declare const partialMessage: PartialMessage; expectType(partialMessage.type); @@ -2351,4 +2349,3 @@ declare const partialUser: PartialUser; expectType(partialUser.username); expectType(partialUser.tag); expectType(partialUser.discriminator); -expectType>(partialUser.toString()); From 971103d249bec9b8d61923099593b5252719d0cb Mon Sep 17 00:00:00 2001 From: Jan Parisek <64596848+janparisek@users.noreply.github.com> Date: Mon, 18 Sep 2023 17:20:08 +0200 Subject: [PATCH 7/7] test(Partials): add tests for .partial property --- packages/discord.js/typings/index.test-d.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index 25fd2393b2de..c021a7b97c7f 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -2321,14 +2321,17 @@ expectType>(guildMember.flags); } 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); @@ -2338,14 +2341,17 @@ 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);