gpt4 book ai didi

node.js - 在 typescript 中使用指挥官

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:35 24 4
gpt4 key购买 nike

我尝试在 typescript 中使用 commander,我想为我的 cli 提供一个合适的类型。所以我从这段代码开始:

import * as program from "commander";

const cli = program
.version("1.0.0")
.usage("[options]")
.option("-d, --debug", "activate more debug messages. Can be set by env var DEBUG.", false)
.parse(process.argv);

console.log(cli.debug)

但是我得到这个错误:

example.ts(9,17): error TS2339: Property 'debug' does not exist on type 'Command'.

所以我尝试添加一个接口(interface),如记录here :

import * as program from "commander";

interface InterfaceCLI extends commander.Command {
debug?: boolean;
}

const cli: InterfaceCLI = program
.version("1.0.0")
.usage("[options]")
.option("-d, --debug", "activate more debug messages. Can be set by env var DEBUG.", false)
.parse(process.argv);

console.log(cli.debug)

我得到这个错误:

example.ts(3,32): error TS2503: Cannot find namespace 'commander'.

据我了解,cli 实际上是 commander.Command 类型的类,所以我尝试添加一个类:

import * as program from "commander";

class Cli extends program.Command {
public debug: boolean;
}

const cli: Cli = program
.version("1.0.0")
.usage("[options]")
.option("-d, --debug", "activate more debug messages. Can be set by env var DEBUG.", false)
.parse(process.argv);

console.log(cli.debug)

这给了我这个错误:

example.ts(7,7): error TS2322: Type 'Command' is not assignable to type 'Cli'.
Property 'debug' is missing in type 'Command'.

我不知道如何在我的文件或新的 .d.ts 文件中向 Command 类添加属性。

最佳答案

使用您的第一个代码片段和以下依赖项,我没有收到错误:

"dependencies": {
"commander": "^2.11.0"
},
"devDependencies": {
"@types/commander": "^2.9.1",
"typescript": "^2.4.1"
}

Typescript 将 cli.debug 解释为 any。我想类型声明已经更新。所以,如果您对 any 没问题,问题就解决了。

如果你真的想告诉 Typescript debug 的类型,declaration merging原则上是要走的路。它基本上是这样工作的:

class C {
public foo: number;
}

interface C {
bar: number;
}

const c = new C();
const fooBar = c.foo + c.bar;

但是,有一个问题:program.Command is not a type but a variable .所以,你不能这样做:

interface program.Command {
debug: boolean;
}

虽然您可以这样做:

function f1(): typeof program.Command {
return program.Command;
}

type T = typeof program.Command;

function f2(): T {
return program.Command;
}

你不能这样做:

interface typeof program.Command {
}

也不是这个:

type T = typeof program.Command;

interface T {
}

不知道这个问题能不能解决

关于node.js - 在 typescript 中使用指挥官,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43797880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com