Skip to content

stringify header and cast options: "no overload matches this call" #391

@theetrain

Description

@theetrain

Describe the bug

csv-stringify@6.4.0

I'm using stringify to cast output values within a file stream, but I see a type warning:

No overload matches this call.
The last overload gave the following error.
Argument of type { header: boolean; cast: { boolean: (value: boolean, ctx: CastingContext) => string | boolean; }; } is not assignable to parameter of type Input.
Object literal may only specify known properties, and header does not exist in type any[].

My code runs fine. This warning gives the impression that header and cast are mutually exclusive.

When I remove header, I see a different warning:

No overload matches this call.
The last overload gave the following error.
Argument of type { cast: { boolean: (value: boolean, ctx: CastingContext) => string | boolean; }; } is not assignable to parameter of type Input.
Object literal may only specify known properties, and cast does not exist in type any[].

To Reproduce

Here's my code:

fs.createReadStream(inFile)
  // ...
  .pipe(stringify({
    header: isOutFileNew,
//  ^^^^^ warning
    cast: {
      boolean: (value, ctx) => {
        if (ctx.header) return value
        if (ctx.column === 'Removed' && value === false) {
          return '0'
        }
        return String(value)
      }
    }
  }))

Additional context

My guess is the overloaded functions aren't being determined in the correct oder, where Input is being inferred instead of Options:

declare function stringify(options: Options, callback?: Callback): Stringifier
declare function stringify(input: Input, callback?: Callback): Stringifier

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions