Reputation: 3773
When debugging an arrow function in javascript you can write like this:
const sum = (a, b) => console.log(a, b) || a + b;
This will first console log a
and b
and then return the actual result of the function.
But when using Typescript it will complain about console log not being able to be tested for truthiness:
An expression of type 'void' cannot be tested for truthiness
This feels like a valid complaint, but at the same time it's a neat trick to debug arrow functions and I would very much like to not have to add curly braces everywhere I have arrow functions if possible.
Even though the log is only there temporarily, are there any way to get Typescript to accept this pattern without using @ts-ignore
?
Upvotes: 4
Views: 952
Reputation: 20220
Casting the console.log
expression to a boolean should work around this.
For example:
const sum = (a, b) => Boolean(console.log(a, b)) || a + b;
Since the expression returns undefined
, casting it to boolean would always be false
, ensuring any following expression will be returned.
Upvotes: 4
Reputation: 29
I usually use as below:
const sum = (a, b) => a + b && console.log(a, b);
this is my suggestion. :D
Upvotes: 0
Reputation: 370809
You could overwrite the console
type beforehand. Do it once, and you won't have to modify any of your other calls to console.log
:
declare const console = {
log: (...args: unknown[]) => undefined,
// etc
};
const sum = (a: number, b: number) => console.log(a, b) || 'foo';
const another = (a: number, b: number) => console.log(a, b) || 'bar';
Upvotes: 1
Reputation: 6749
Change it to use comma operator:
const logger = (a, b) => (console.log(a, b), a + b);
Upvotes: 5