Это то, что я мог бы достичь:
var options = ["pending", "rejected", "accepted", "hold"];
args.option(
'-s --status <statusString>',
`Status to filter questions: ${options}`,
function(val, _) {
if (!options.includes(val)) {
throw Error(`${val} is not from ${options}`);
}
return val;
},
'pending')
.parse(process.argv)
Не идеально, так как вам нужно отформатировать строку справки и проверить значение ввода самостоятельно. Кроме того, генерирование ошибки из функции проверки не обрабатывается Commander красиво и приводит к сбою со всей трассировкой стека в выводе. Я не смог найти лучшего способа сообщить Commander, что ввод неверен.
В моем случае я, наконец, просто переключился на argparse , который является клоном парсера командной строки Python и, кажется, лучше продумано. Вот как вы ограничиваете выбор:
const ArgumentParser = require('argparse').ArgumentParser;
const argparser = new ArgumentParser({ description: 'An example'});
argparser.addArgument('--status', {
choices: ['pending', 'rejected', 'accepted', 'hold'],
defaultValue: 'pending'});
const args = argparser.parseArgs();
Это сделает всю работу, включая хорошее справочное сообщение и проверку ввода.