我的应用上有以下代码:
import commander = require('commander');
commander
.option('-u, --user [user]', 'user code')
.option('-p, --pass [pass]', 'pass code')
.parse(process.argv);
然后我尝试访问:
commander.user
但是我收到一个错误(来自DefinitelyTyped的commander.d.ts):
user does not exist on type IExportedCommand
我尝试添加此
interface IExportedCommand {
user: string;
pass: string;
}
但我仍然得到错误。我该如何解决这个问题?
答案 0 :(得分:5)
使用以下内容创建文件commander-expansion.d.ts
:
declare namespace commander {
interface IExportedCommand extends ICommand {
user: string;
pass: string;
}
}
因为我最近做了类似的事情,所以推荐--auth user:password
。保存您处理用户丢失的用户名或密码。但是阻止使用:
作为密码属性
¯\_(ツ)_/¯
更多:https://github.com/alm-tools/alm/blob/master/src/server/commandLine.ts#L24
答案 1 :(得分:4)
你也可以这样做:
npm install --save @types/commander
答案 2 :(得分:1)
您可以将Typescript接口保留在同一个文件中。
interface InterfaceCLI extends commander.ICommand {
user?: string
password?: string
}
在运行program.parse
函数后,可以将此接口定义为变量。
const cli: InterfaceCLI = program.parse(process.argv)
console.log(cli.user, cli.password)
我希望这有帮助!
答案 3 :(得分:0)
我知道这个话题很老,但是在寻求帮助方面遇到了很多麻烦。我已经解决了,但是我还是不太熟练使用Typescript或JavaScript,并希望获得一些反馈。
在阅读完上述答案后,我无法弄清 ICommand 类型的位置。但是我确实找到了一个类型名称 Command 。
此外,各种摘要使用的变量名不一致,这使得它们难以解读。
所以我玩了一段时间,想出了这个完整的例子。整个应用程序位于一个文件中:
import commander = require('commander');
interface InterfaceCLI extends commander.Command {
user?: string
password?: string
}
class Startup {
public static main(): number {
const cli: InterfaceCLI = commander
.option('-u, --user [user]', 'user id')
.option('-p, --password [password]', 'user\'s password')
.parse(process.argv);
console.log(cli.user, cli.password);
return 0;
}
}
Startup.main();
依赖项:install commander@2.16.0 --save
请让我知道您对这个解决方案的看法,因为我打算将其用作生产命令行应用程序的起点。