typescript - Använda oclif i vscode, hur löser man problemet "The inferred type of 'flags' cannot be named without a reference to..."?


Jag bygger ett CLI-verktyg med oclif och skriver det i Typescript.

Inuti vscode ger alla de genererade kommandofilerna mig ett felmeddelande som säger

Den härledda typen av 'flags' kan inte namnges utan en referens till '../../../../../../Projects/bag-man/tmp/mynewcli/node_modules/@oclif/parser/lib/flags'. Detta är troligtvis inte portabelt. En typanteckning är nödvändig.

Den extra frustrerande delen är att i vissa filer upprepas felet 4 gånger för samma instans (dvs det finns bara en röd understrykning i hela filen, men vyn "Problem" listar samma problem 4 gånger).

Detta är en av filerna som visar det 4 gånger - detta är exakt vad oclif genererar för en kommandofil. Problemet finns på rad 12 på 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}`)
    }
  }
}

Har du någon idé om vad jag behöver ändra, antingen i koden eller i mina VSCode-linterinställningar, för att lösa detta?

Svar #1

Jag har inte kollat varför, men att sätta "declaration": false i din tsconfig.json löser problemet.

Svar #2

Jag löste detta genom att lägga till typen till flags-fältet. Till exempel:

static flags : flags.Input<any> = {
  // your flags...
}