stringify `header` and `cast` options: "no overload matches this call"
theetrain opened this issue · comments
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 typeInput
.
Object literal may only specify known properties, andheader
does not exist in typeany[]
.
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 typeInput
.
Object literal may only specify known properties, andcast
does not exist in typeany[]
.
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
:
node-csv/packages/csv-stringify/lib/index.d.ts
Lines 120 to 121 in 22f4017
Thank you for reporting your issue. TS is not my thing, if anyone interested into fixing this issue, please reproduce first the warning in a test before fixing.
I reproduce your issue. It was related to an invalid return type, if (ctx.header) return value
shall be if (ctx.header) return String(value)
.