2

我有这个代码

const argv = yargs
    .option("applyChanges", {
        alias: "a",
        description: "Apply the changes",
        type: "boolean"
    })
    .help()
    .alias("help", "h").argv;

const options = {
    applyChanges: argv.applyChanges ? argv.applyChanges : false
};

获取argv.applyChanges布尔值。但是在对 yargs 17 进行最新更新后,我在argv.applyChanges

属性 'applyChanges' 不存在于类型 '{ [x: string]: unknown; applyChanges: 布尔值 | 不明确的; _:(字符串|数字)[];$0:字符串;} | 承诺<{ [x:字符串]:未知;applyChanges: 布尔值 | 不明确的; _:(字符串|数字)[];$0:字符串;}>'。“Promise<{ [x: string]: unknown; 类型上不存在属性“applyChanges” applyChanges: 布尔值 | 不明确的; _:(字符串|数字)[];$0:字符串;}>'。

我尝试使用await但没有成功。我该怎么办?此代码与以前的 yargs 版本 16.xx 一起使用

4

1 回答 1

2

argv 的类型是联合。第一项是参数,第二项是解决这些参数的承诺。

它是联合的原因是因为在 yargs 中可以有命令,并且这些命令的处理程序可以是异步的。因此 .argv 将在该命令完成后解析。

在示例中,您没有使用任何异步命令,但是当您调用 .argv 或 .parse 时,yargs 输入并不知道这一点。

您需要做的是使用parseSync明确告诉 yargs 您没有异步命令(如果有异步命令,这也会引发错误)。

const argv = yargs
    .option("applyChanges", {
        alias: "a",
        description: "Apply the changes",
        type: "boolean"
    })
    .help()
    .alias("help", "h").parseSync();

const options = {
    applyChanges: argv.applyChanges ? argv.applyChanges : false
};
于 2021-06-24T08:02:38.130 回答