【问题标题】:yargs argv not working anymore after update to latest version更新到最新版本后 yargs argv 不再工作
【发布时间】:2021-06-10 13:52:11
【问题描述】:

我有这个代码

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 上收到错误消息

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

我尝试使用await,但没有成功。 我该怎么办? 此代码适用于以前的 yargs 版本 16.x.x

【问题讨论】:

    标签: yargs


    【解决方案1】:

    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
    };
    

    【讨论】:

      最近更新 更多