mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-09 16:13:31 +01:00
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 `<PartialMessage>.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 <Partials>.partial property
---------
Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com>
This commit is contained in:
18
packages/discord.js/typings/index.d.ts
vendored
18
packages/discord.js/typings/index.d.ts
vendored
@@ -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<true>;
|
||||
id: Snowflake;
|
||||
partial: true;
|
||||
} & {
|
||||
[K in keyof Omit<T, 'client' | 'id' | 'partial' | E>]: K extends N ? null : K extends M ? T[K] | null : T[K];
|
||||
[K in keyof Omit<T, OverridableKeys>]: K extends 'partial'
|
||||
? true
|
||||
: K extends NulledKeys
|
||||
? null
|
||||
: K extends NullableKeys
|
||||
? T[K] | null
|
||||
: T[K];
|
||||
};
|
||||
|
||||
export interface PartialDMChannel extends Partialize<DMChannel, null, null, 'lastMessageId'> {
|
||||
|
||||
@@ -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<Readonly<GuildMemberFlagsBitField>>(guildMember.flags);
|
||||
const onboarding = await guild.fetchOnboarding();
|
||||
expectType<GuildOnboarding>(onboarding);
|
||||
}
|
||||
|
||||
declare const partialDMChannel: PartialDMChannel;
|
||||
expectType<true>(partialDMChannel.partial);
|
||||
expectType<undefined>(partialDMChannel.lastMessageId);
|
||||
|
||||
declare const partialGuildMember: PartialGuildMember;
|
||||
expectType<true>(partialGuildMember.partial);
|
||||
expectType<null>(partialGuildMember.joinedAt);
|
||||
expectType<null>(partialGuildMember.joinedTimestamp);
|
||||
expectType<null>(partialGuildMember.pending);
|
||||
|
||||
declare const partialMessage: PartialMessage;
|
||||
expectType<true>(partialMessage.partial);
|
||||
expectType<null>(partialMessage.type);
|
||||
expectType<null>(partialMessage.system);
|
||||
expectType<null>(partialMessage.pinned);
|
||||
expectType<null>(partialMessage.tts);
|
||||
expectAssignable<null | Message['content']>(partialMessage.content);
|
||||
expectAssignable<null | Message['cleanContent']>(partialMessage.cleanContent);
|
||||
expectAssignable<null | Message['author']>(partialMessage.author);
|
||||
|
||||
declare const partialMessageReaction: PartialMessageReaction;
|
||||
expectType<true>(partialMessageReaction.partial);
|
||||
expectType<null>(partialMessageReaction.count);
|
||||
|
||||
declare const partialThreadMember: PartialThreadMember;
|
||||
expectType<true>(partialThreadMember.partial);
|
||||
expectType<null>(partialThreadMember.flags);
|
||||
expectType<null>(partialThreadMember.joinedAt);
|
||||
expectType<null>(partialThreadMember.joinedTimestamp);
|
||||
|
||||
declare const partialUser: PartialUser;
|
||||
expectType<true>(partialUser.partial);
|
||||
expectType<null>(partialUser.username);
|
||||
expectType<null>(partialUser.tag);
|
||||
expectType<null>(partialUser.discriminator);
|
||||
|
||||
Reference in New Issue
Block a user