在 vscode 中使用 oclif,如何解决 "The inferred type of 'flags' cannot be named without a reference to..." 问题?
Using oclif in vscode, how to resolve "The inferred type of 'flags' cannot be named without a reference to..." problem?
我正在使用 oclif 构建一个 CLI 实用程序,用 Typescript 编写它。
在 vscode 中所有生成的命令文件都给我一个错误
The inferred type of 'flags' cannot be named without a reference to '../../../../../../Projects/bag-man/tmp/mynewcli/node_modules/@oclif/parser/lib/flags'. This is likely not portable. A type annotation is necessary.
额外令人沮丧的部分是,在某些文件中,它针对同一实例重复错误 4 次(即整个文件中只有一条红色下划线,但“问题”视图列出了 4 次相同的问题.)
这是显示它 4 次的文件之一 - 这正是 oclif 为命令文件生成的内容。问题出现在 flags
.
的第 12 行
import {Command, flags} from '@oclif/command'
export default class Hello extends Command {
static description = 'describe the command here'
static examples = [
`$ mynewcli hello
hello world from ./src/hello.ts!
`,
]
static flags = {
help: flags.help({char: 'h'}),
// flag with a value (-n, --name=VALUE)
name: flags.string({char: 'n', description: 'name to print'}),
// flag with no value (-f, --force)
force: flags.boolean({char: 'f'}),
}
static args = [{name: 'file'}]
async run() {
const {args, flags} = this.parse(Hello)
const name = flags.name ?? 'world'
this.log(`hello ${name} from ./src/commands/hello.ts`)
if (args.file && flags.force) {
this.log(`you input --force and --file: ${args.file}`)
}
}
}
关于我需要修改什么来解决这个问题的任何想法,无论是在代码中还是在我的 vscode linter 设置中?
我没有研究原因,但在您的 tsconfig.json
中设置 "declaration": false
可以解决问题。
我通过将类型添加到 flags
字段解决了这个问题。
例如:
static flags : flags.Input<any> = {
// your flags...
}
我正在使用 oclif 构建一个 CLI 实用程序,用 Typescript 编写它。
在 vscode 中所有生成的命令文件都给我一个错误
The inferred type of 'flags' cannot be named without a reference to '../../../../../../Projects/bag-man/tmp/mynewcli/node_modules/@oclif/parser/lib/flags'. This is likely not portable. A type annotation is necessary.
额外令人沮丧的部分是,在某些文件中,它针对同一实例重复错误 4 次(即整个文件中只有一条红色下划线,但“问题”视图列出了 4 次相同的问题.)
这是显示它 4 次的文件之一 - 这正是 oclif 为命令文件生成的内容。问题出现在 flags
.
import {Command, flags} from '@oclif/command'
export default class Hello extends Command {
static description = 'describe the command here'
static examples = [
`$ mynewcli hello
hello world from ./src/hello.ts!
`,
]
static flags = {
help: flags.help({char: 'h'}),
// flag with a value (-n, --name=VALUE)
name: flags.string({char: 'n', description: 'name to print'}),
// flag with no value (-f, --force)
force: flags.boolean({char: 'f'}),
}
static args = [{name: 'file'}]
async run() {
const {args, flags} = this.parse(Hello)
const name = flags.name ?? 'world'
this.log(`hello ${name} from ./src/commands/hello.ts`)
if (args.file && flags.force) {
this.log(`you input --force and --file: ${args.file}`)
}
}
}
关于我需要修改什么来解决这个问题的任何想法,无论是在代码中还是在我的 vscode linter 设置中?
我没有研究原因,但在您的 tsconfig.json
中设置 "declaration": false
可以解决问题。
我通过将类型添加到 flags
字段解决了这个问题。
例如:
static flags : flags.Input<any> = {
// your flags...
}