== Why is this an issue?

The nullish coalescing operator `??` allows providing a default value when dealing with `null` or `undefined`. It only coalesces when the original value is `null` or `undefined`. Therefore, it is safer and shorter than relying upon chaining logical `||` expressions or testing against `null` or `undefined` explicitly.

This rule reports when disjunctions (`||`) and conditionals (`?`) can be safely replaced with coalescing (`??`).

The TSConfig needs to set `strictNullChecks` to `true` for the rule to work properly.

== How to fix it

Rewrite the logical expression `||` using `??` on the unchecked operands.

=== Code examples

==== Noncompliant code example

[source,typescript,diff-id=1,diff-type=noncompliant]
----
function either(x: number | undefined, y: number) {
  return x || y;
}
----

==== Compliant solution

[source,typescript,diff-id=1,diff-type=compliant]
----
function either(x: number | undefined, y: number) {
  return x ?? y;
}
----

==== Noncompliant code example

[source,typescript,diff-id=2,diff-type=noncompliant]
----
function either(x: number | undefined, y: number) {
  return x !== undefined ? x : y;
}
----

==== Compliant solution

[source,typescript,diff-id=2,diff-type=compliant]
----
function either(x: number | undefined, y: number) {
  return x ?? y;
}
----

== Resources

* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing[MDN Nullish coalescing]
