forked from hongaar/bandersnatch
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcommand.test-d.ts
128 lines (120 loc) · 3.75 KB
/
command.test-d.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import { expectType } from "tsd";
import { Command, command } from "../../src/command";
const cmd = command();
expectType<Command>(cmd);
// Chainable methods
expectType<Command>(cmd.description("foo"));
expectType<Command>(cmd.hidden());
expectType<Command>(cmd.add(cmd));
expectType<Command>(cmd.default());
expectType<Command>(cmd.action(() => {}));
// String argument types
cmd.argument("foo").action((args) => {
// No options
expectType<{ foo: string }>(args);
});
cmd.argument("foo", { default: "bar" }).action((args) => {
// With default
expectType<{ foo: string }>(args);
});
cmd.argument("foo", { variadic: true }).action((args) => {
// Variadic
expectType<{ foo: string[] }>(args);
});
cmd.argument("foo", { optional: true }).action((args) => {
// Optional
expectType<{ foo: string | undefined }>(args);
});
cmd.argument("foo", { optional: true, default: "bar" }).action((args) => {
// Optional with default
expectType<{ foo: string }>(args);
});
cmd.argument("foo", { choices: ["bar", "baz"] as const }).action((args) => {
// Enum
expectType<{ foo: "bar" | "baz" }>(args);
});
cmd
.argument("foo", { choices: ["bar", "baz"] as const, optional: true })
.action((args) => {
// Optional enum
expectType<{ foo: "bar" | "baz" | undefined }>(args);
});
cmd
.argument("foo", { choices: ["bar", "baz"] as const, variadic: true })
.action((args) => {
// Variadic enum
expectType<{ foo: ("bar" | "baz")[] }>(args);
});
// Numeric argument types
cmd.argument("foo", { type: "number" }).action((args) => {
// No options
expectType<{ foo: number }>(args);
});
cmd.argument("foo", { type: "number", default: 100 }).action((args) => {
// With default
expectType<{ foo: number }>(args);
});
cmd.argument("foo", { default: 100 }).action((args) => {
// Inferred from default
expectType<{ foo: number }>(args);
});
cmd.argument("foo", { type: "number", optional: true }).action((args) => {
// Optional
expectType<{ foo: number | undefined }>(args);
});
cmd
.argument("foo", { type: "number", optional: true, default: 100 })
.action((args) => {
// Optional with default
expectType<{ foo: number }>(args);
});
cmd.argument("foo", { optional: true, default: 100 }).action((args) => {
// Optional inferred from default
expectType<{ foo: number }>(args);
});
// Boolean argument types
cmd.argument("foo", { type: "boolean" }).action((args) => {
// No options
expectType<{ foo: boolean }>(args);
});
cmd.argument("foo", { type: "boolean", default: false }).action((args) => {
// With default
expectType<{ foo: boolean }>(args);
});
cmd.argument("foo", { default: false }).action((args) => {
// Inferred from default
expectType<{ foo: boolean }>(args);
});
cmd.argument("foo", { type: "boolean", optional: true }).action((args) => {
// Optional
expectType<{ foo: boolean | undefined }>(args);
});
cmd
.argument("foo", { type: "boolean", optional: true, default: false })
.action((args) => {
// Optional with default
expectType<{ foo: boolean }>(args);
});
cmd.argument("foo", { optional: true, default: false }).action((args) => {
// Optional inferred from default
expectType<{ foo: boolean }>(args);
});
// String option types
cmd.option("foo").action((args) => {
// Default type
expectType<{ foo: unknown }>(args);
});
cmd.option("foo", { type: "string" }).action((args) => {
// Explicit string type
expectType<{ foo: string | undefined }>(args);
});
cmd.option("foo", { default: "string" }).action((args) => {
// Implicit string type
expectType<{ foo: string }>(args);
});
cmd.option("foo", { type: "string", required: true }).action((args) => {
// Required explicit string type
expectType<{ foo: string }>(args);
});
// @fixme: unspecified options are omitted by yargs but are always present in
// the args.