standard / ts-standard

Typescript style guide, linter, and formatter using StandardJS
https://www.npmjs.com/package/ts-standard
MIT License
464 stars 36 forks source link

--fix for "An explicit null check is required" breaks code #226

Open verhovsky opened 2 years ago

verhovsky commented 2 years ago

What version of this package are you using?

What operating system, Node.js, and npm version? macos 12.3 Node: v16.14.2 npm: 8.5.3

What happened?

write this code:

function stuff (arg: string, optionalArg?: string[]) {
  optionalArg = optionalArg || ['some', 'default', 'value']
}

run ts-standard --fix, it turns into

function stuff(arg: string, optionalArg?: string[]) {
  optionalArg = (optionalArg != null) || ['some', 'default', 'value']
}

which is broken because optionalArg = (optionalArg != null) sets optionalArg to true instead of keeping it as-is when it has a truthy value. Also, typescript doesn't even compile the new code because the variable can now be a string[] or boolean.

What did you expect to happen?

Code doesn't get changed or code gets changed to use the ?? operator instead.

Are you willing to submit a pull request to fix this bug?

no

fasenderos commented 1 year ago

I reported this bug to typescript-eslint, resolved in v6.4.0. Also request an update to eslint-config-standard-with-typescript which update only the devDep (not the peerDep) on v38.0.0.

@theoludwig @lindluni @LinusU Updating both the dependencies ensure that a code fix does not break app functionality.