This repository has been archived by the owner on Mar 15, 2022. It is now read-only.
/
ParsableType.ts
81 lines (77 loc) · 1.68 KB
/
ParsableType.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import {
User,
TextChannel,
Channel,
GuildChannel,
DMChannel,
VoiceChannel,
CategoryChannel,
NewsChannel,
StoreChannel,
Role,
} from "discord.js";
/** Name of parsable types. */
export type ParsableTypeName =
| "string"
| "boolean"
| "integer"
| "float"
| "user"
| "role"
| "channel"
| "guild channel"
| "dm channel"
| "text channel"
| "voice channel"
| "category channel"
| "news channel"
| "store channel";
/** Parsable types. */
export type ParsableType =
| string
| boolean
| number
| User
| Role
| Channel
| GuildChannel
| DMChannel
| TextChannel
| VoiceChannel
| CategoryChannel
| NewsChannel
| StoreChannel;
/** @ignore */
export type ParsableTypeOf<
Names extends ParsableTypeName | readonly ParsableTypeName[]
> = Names extends ParsableTypeName ? TypeName2Type<Names> : TypeName2Type<Exclude<Names, ParsableTypeName>[number]>;
/** @ignore */
type TypeName2Type<Name extends ParsableTypeName> = Name extends "string"
? string
: Name extends "boolean"
? boolean
: Name extends "integer"
? number
: Name extends "float"
? number
: Name extends "user"
? User
: Name extends "role"
? Role
: Name extends "channel"
? Channel
: Name extends "guild channel"
? GuildChannel
: Name extends "dm channel"
? DMChannel
: Name extends "text channel"
? TextChannel
: Name extends "voice channel"
? VoiceChannel
: Name extends "category channel"
? CategoryChannel
: Name extends "news channel"
? NewsChannel
: Name extends "store channel"
? StoreChannel
: never;