文本 (text)
text (message, [initial], [style])
用于让用户随意输入文字内容
用户按下tab键会自动输入设置好的initial值。
示例:

{
type: 'text',
name: 'value',
message: `What's your twitter handle?`
}
2
3
4
5
| 参数 | 类型 | 描述 |
|---|---|---|
| message | String | 问题的内容 |
| initial | String | 默认字符串值 |
| style | String | 渲染样式(default, password, invisible, emoje)。默认是default |
| format | Function | 接收用户的输入。返回值会放入答案对象中 |
| validate | Function | 接收用户的输入。如果符合验证则返回true,否则返回一个错误信息String。如果返回的是false,那么会返回一个默认的错误信息 |
| onRender | Function | 渲染时的回调。其中的this指向当前问题 |
| onState | Function | 状态改变时的回调。它的参数是一个拥有两个属性的对象: value和aborted |
密码 (password)
password(message, [initial])
密码形式的输入项,用以遮蔽用户的输入
设置参数和text相类似,也可以为password设置style
示例:

| 参数 | 类型 | 描述 |
|---|---|---|
| message | String | 问题的内容 |
| initial | String | 默认字符串值 |
| format | Function | 接收用户的输入。返回值会放入答案对象中 |
| validate | Function | 接收用户的输入。如果符合验证则返回true,否则返回一个错误信息String。如果返回的是false,那么会返回一个默认的错误信息 |
| onRender | Function | 渲染时的回调。其中的this指向当前问题 |
| onState | Function | 状态改变时的回调。它的参数是一个拥有两个属性的对象: value和aborted |
隐藏 (invisible)
invisible(message, [initial])
隐藏用户的输入内容
和sudo类似,用户的输入内容是不可见的。它和样式设置为invisible的text类型有异曲同工之妙。
示例:

{
type: 'invisible',
name: 'value',
message: 'Enter password'
}
2
3
4
5
| 参数 | 类型 | 描述 |
|---|---|---|
| message | String | 问题的内容 |
| initial | String | 默认字符串值 |
| format | Function | 接收用户的输入。返回值会放入答案对象中 |
| validate | Function | 接收用户的输入。如果符合验证则返回true,否则返回一个错误信息String。如果返回的是false,那么会返回一个默认的错误信息 |
| onRender | Function | 渲染时的回调。其中的this指向当前问题 |
| onState | Function | 状态改变时的回调。它的参数是一个拥有两个属性的对象: value和aborted |
数字 (number)
number(message, initial, [max], [min], [style])
用于让用户输入数字
您可以输入数字并使用↑↓键来增/减值。只接受数字类型的输入。用户按下tab键会自动输入设置好的initial值。
示例:

{
type: 'number',
name: 'value',
message: 'How old are you?',
initial: 0,
style: 'default',
min: 2,
max: 10
}
2
3
4
5
6
7
8
9
| 参数 | 类型 | 描述 |
|---|---|---|
| message | String | 问题的内容 |
| initial | Number | 默认数字值 |
| format | Function | 接收用户的输入。返回值会放入答案对象中 |
| validate | Function | 接收用户的输入。如果符合验证则返回true,否则返回一个错误信息String。如果返回的是false,那么会返回一个默认的错误信息 |
| max | Number | 最大值。默认是Infinity |
| min | Number | 最小值。默认是-Infinity |
| float | Boolean | 是否允许输入浮点数,默认是false |
| round | Number | 将浮点数四舍五入到几位小数。默认是2 |
| increment | Number | 使用↑↓键来增/减值的步幅。默认是1 |
| style | String | 渲染样式(default, password, invisible, emoje)。默认是default |
| onRender | Function | 渲染时的回调。其中的this指向当前问题 |
| onState | Function | 状态改变时的回调。它的参数是一个拥有两个属性的对象: value和aborted |
是非 (confirm)
confirm(message, [initial])
经典的是/否问题
键入 y/n 来回答yes/no
示例:

{
type: 'confirm',
name: 'value',
message: 'Can you confirm?',
initial: true
}
2
3
4
5
6
| 参数 | 类型 | 描述 |
|---|---|---|
| message | String | 问题的内容 |
| initial | Boolean | 默认值。默认为false |
| format | Function | 接收用户的输入。返回值会放入答案对象中 |
| onRender | Function | 渲染时的回调。其中的this指向当前问题 |
| onState | Function | 状态改变时的回调。它的参数是一个拥有两个属性的对象: value和aborted |
清单 (list)
list(message, [initial])
返回值为数组的问题列表
和text类型相似,返回值是由分隔符(seprartor)分割的字符串组成的数组。
示例:

{
type: 'list',
name: 'value',
message: 'Enter keywords',
initial: '',
separator: ','
}
2
3
4
5
6
7
| 参数 | 类型 | 描述 |
|---|---|---|
| message | String | 问题的内容 |
| initial | Boolean | 默认值 |
| format | Function | 接收用户的输入。返回值会放入答案对象中 |
| seprartor | String | 字符串分隔符。默认是,。会自动trim掉前后的空格 |
| onRender | Function | 渲染时的回调。其中的this指向当前问题 |
| onState | Function | 状态改变时的回调。它的参数是一个拥有两个属性的对象: value和aborted |
切换 (toggle)
toggle(message, [initial], [active], [inactive])
交互式的开关/切换问题
使用 箭头 tab 空格 来切换各个选项。
示例

{
type: 'toggle',
name: 'value',
message: 'Can you confirm?',
initial: true,
active: 'yes',
inactive: 'no'
}
2
3
4
5
6
7
8
| 参数 | 类型 | 描述 |
|---|---|---|
| message | String | 问题的内容 |
| initial | Boolean | 默认值,默认为false |
| format | Function | 接收用户的输入。返回值会放入答案对象中 |
| active | String | 激活(active)状态的说明文字。默认是on |
| inactive | String | 未激活(inactive)状态的说明文字。默认是off |
| onRender | Function | 渲染时的回调。其中的this指向当前问题 |
| onState | Function | 状态改变时的回调。它的参数是一个拥有两个属性的对象: value和aborted |
选择 (select)
select(message, choices, [initial], [hint], [warn])
交互式选择问题
示例:

{
type: 'select',
name: 'value',
message: 'Pick a color',
choices: [
{ title: 'Red', description: 'This option has a description', value: '#ff0000' },
{ title: 'Green', value: '#00ff00', disabled: true },
{ title: 'Blue', value: '#0000ff' }
],
initial: 1
}
2
3
4
5
6
7
8
9
10
11
| 参数 | 类型 | 描述 |
|---|---|---|
| message | String | 问题的内容 |
| initial | Number | 默认值的索引 |
| format | Function | 接收用户的输入。返回值会放入答案对象中 |
| hint | String | 展示给用户的提示 |
| warn | String | 当用户选则了一个不可用(disable)的选项时弹出的警告信息 |
| choices | Array | 字符串或选项对象的数组[{ title, description, value, disabled }, ...]。如果没有指定value, 那么将使用其索引值 |
| onRender | Function | 渲染时的回调。其中的this指向当前问题 |
| onState | Function | 状态改变时的回调。它的参数是一个拥有两个属性的对象: value和aborted |
多选 (multiselect)
multiselect(message, choices, [initial], [max], [hint], [warn])
autocompleteMultiselect(same)
交互式多选问题
autocomplete 是一个可搜索的多选问题,配置项相同。常用于长列表。
用 空格 键(也可以使用←和→)来切换选择/取消状态,用 ↑↓ 切换问题。 用 tab 来循环列表。默认返回一个包含所选项value而非title的数组。

{
type: 'multiselect',
name: 'value',
message: 'Pick colors',
choices: [
{ title: 'Red', value: '#ff0000' },
{ title: 'Green', value: '#00ff00', disabled: true },
{ title: 'Blue', value: '#0000ff', selected: true }
],
max: 2,
hint: '- Space to select. Return to submit'
}
2
3
4
5
6
7
8
9
10
11
12
| 参数 | 类型 | 描述 |
|---|---|---|
| message | String | 问题的内容 |
| format | Function | 接收用户的输入。返回值会放入答案对象中 |
| instructions | String | Boolean | 说明 |
| choices | Array | 字符串或选项对象的数组[{ title, value, disabled }, ...]。如果没有指定value, 那么将使用其索引值 |
| optionsPerPage | Number | 每一页所显示的选项数,默认是10 |
| min | Number | 最少选择数。传入负数会报错 |
| max | Number | 最多选择数 |
| hint | String | 展示给用户的提示 |
| warn | String | 当用户选则了一个不可用(disable)的选项时弹出的警告信息 |
| onRender | Function | 渲染时的回调。其中的this指向当前问题 |
| onState | Function | 状态改变时的回调。它的参数是一个拥有两个属性的对象: value和aborted |
这是为数不多的不需要设置initial值的问题类型。如果您想要预设一些选项,请传入把choices中的对象设置一个selected: true
自动填充 (autoComplete)
autocomplete(message, choices, [initial], [suggest], [limit], [style])
交互式自动填充答案
这种类型会基于用户的输入来显示选项。再根据输入进一步过滤。 通过 ↑↓ 切换问题。 用 tab 来循环列表。 通过 Page Up/Page Down (Mac上则是 fn + ↑/↓) 来翻页。 按下 回车 选择处于高亮状态的项目。
默认的suggest函数是基于选项的title属性来排序的。您可以传入自定义的suggest方法来更改选项的顺序。
示例:

{
type: 'autocomplete',
name: 'value',
message: 'Pick your favorite actor',
choices: [
{ title: 'Cage' },
{ title: 'Clooney', value: 'silver-fox' },
{ title: 'Gyllenhaal' },
{ title: 'Gibson' },
{ title: 'Grant' }
]
}
2
3
4
5
6
7
8
9
10
11
12
| 参数 | 类型 | 描述 |
|---|---|---|
| message | String | 提问的信息 |
| format | Function | 接收用户的输入值。返回值会放入答案对象中 |
| choices | Array | 自动填充的选项的数组[{title, value}], ... |
| suggest | function | 过滤器方法。默认是按title属性排列。 suggest应该返回一个promise。它以title作为默认参数。 |
| limit | Number | 显示结果的最大数量。默认是10 |
| initial | String | Number | 默认值 |
| style | String | 渲染样式(default, password, invisible, emoje)。默认是default |
| fallback | String | 没有匹配到任何项的回退信息。如果提供了initial值则默认使用它 |
| onRender | Function | 渲染时的回调。其中的this指向当前问题 |
| onState | Function | 状态改变时的回调。它的参数是一个拥有两个属性的对象: value和aborted |
suggest方法的示例:
const suggestByTitle = (input, choices) => Promise.resolve(choices.filter(i => i.title.slice(0, input.length) === input))
日期 (data)
date(message, [initial], [warn])
交互式日期问答
使用 →/→/tab 切换变更项。使用 ↑/↓ 来更改日期。
示例:

{
type: 'date',
name: 'value',
message: 'Pick a date',
initial: new Date(1997, 09, 12),
validate: date => date > Date.now() ? 'Not in the future' : true
}
2
3
4
5
6
7
| 参数 | 类型 | 描述 |
|---|---|---|
| message | String | 提问的信息 |
| initial | Date | 默认日期 |
| locales | Object | 用于定义本地化设置。示例见后文 |
| mask | String | 日期格式化字符串蒙板。更多信息见后文 |
| validate | Function | 接收用户的输入。如果符合验证则返回true,否则返回一个错误信息String。如果返回的是false,那么会返回一个默认的错误信息 |
| onRender | Function | 渲染时的回调。其中的this指向当前问题 |
| onState | Function | 状态改变时的回调。它的参数是一个拥有两个属性的对象: value和aborted |
默认本地化(locales)设置:
{
months: [
'January', 'February', 'March', 'April',
'May', 'June', 'July', 'August',
'September', 'October', 'November', 'December'
],
monthsShort: [
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
],
weekdays: [
'Sunday', 'Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday', 'Saturday'
],
weekdaysShort: [
'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| 格式 | 输出 |
| 月份 (Month) | |
| M | 1 2 ... 11 12 |
| MM | 01 02 ... 11 12 |
| MMM | Jan Feb ... Nov Dec |
| MMMM | January February ... Nobermber December |
| 日期 (Day of Month) | |
| D | 1 2 ... 30 31 |
| Do | 1st 2nd ... 30th 31st |
| DD | 01 02 ... 30 31 |
| 星期 (Day of Week) | |
| d | 0 1 ... 5 6 |
| ddd | Sun Mon ... Fri Sat |
| dddd | Sunday Monday ... Friday Saturday |
| 年份 (Year) | |
| YY | 70 71 ... 29 30 |
| YYYY | 1970 1971 ... 2029 2030 |
| 上/下午 (AM/PM) | |
| A | AM PM |
| a | am pm |
| 时 (Hour) | |
| H | 0 1 ... 22 23 |
| HH | 00 01 ... 22 23 |
| h | 1 2 ... 11 12 |
| hh | 01 02 ... 11 12 |
| 分 (Minute) | |
| m | 0 1 ... 58 59 |
| mm | 00 01 ... 58 59 |
| 秒 (Second) | |
| s | 0 1 ... 58 59 |
| ss | 00 01 ... 58 59 |
| 毫秒 (Fractional Second) | |
| S | 0 1 ... 8 9 |
| SS | 0 1 ... 98 99 |
| SSS | 0 1 ... 998 999 |
| SSSS | 0 1 ... 9998 9999 |