Node.js指挥官:可变选项的默认值?

Node.js commander: default for variadic option?

我想要一个带有默认值的可变参数选项,但我只能输入一个值作为默认值,如下所示:

const program = new Command("ingest");
program
    .option("-e, --extensions <ext...>", "file extensions to load", "dat")
    .parse(process.argv);
const options = program.opts();

这有效,默认值为 "dat"。 但是如果默认是多个字符串组成的数组,比如["dat", "txt"]?

怎么办?

我找到的第一个解决方案是不设置默认值,然后,如果 options.extensions 未定义,则使用默认数组加载它。这有效,但显然默认值没有出现在帮助中。

解决这个小问题的第二种方法是输入默认值作为 space 分隔的字符串:

program.option("-e, --extensions <ext...>", "file extensions to load", "dat txt");

然后:

if(typeof options.extensions === "string")
    options.extensions = options.extensions.split(" ")

这样 options.extensions 总是一个字符串数组。

.addOption(new Option()) 可以帮忙吗?不幸的是,除了提供的三个示例之外,我找不到 Option class 的文档。

谢谢! 马里奥

默认值不一定是字符串。使用数组,它甚至可以简化您以后的代码,因为选项值将始终是一个数组。

program.option("-e, --extensions <ext...>", "file extensions to load", ["dat", "txt"]);

TypeScript 更新为在 Commander v9.3.0 允许的类型中包含 string[]

我发现的将数组默认值添加到可变参数选项的最Typescript-friendly方法是:

program.addOption(new Option("-e, --extensions <ext...>",
                             "file extensions to load").default(["dat", "txt"])

希望对您有所帮助