Bug Report
🔎 Search Terms
predicate, discrimination
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about 4.5.2. Test in 4.0 and nightly as well.
⏯ Playground Link
Playground link
💻 Code
functiontest(x: unknown){if(typeofx==="string"||x===0){xif(x==="hello"||x===0){x}}if(check1(x)){xif(check2(x)){x}}}functioncheck1(x: unknown): x is (string|0){returntypeofx==="string"||x===0;}functioncheck2(x: unknown): x is ("hello"|0){returnx==="hello"||x===0;}🙁 Actual behavior
In the first set of nested scopes, typeof x is narrowed to string | 0 by the first if, and then "hello" | 0 by the second if. This behavior is correct.
In the second set of nested scopes, typeof x is narrowed to string | 0 by the first if, but is narrowed to 0 by the second if.
🙂 Expected behavior
"hello" is a valid part of the subset of string, and should be included in the union type. The types derived from these two methods should be identical.
Bug Report
🔎 Search Terms
predicate, discrimination
🕗 Version & Regression Information
⏯ Playground Link
Playground link
💻 Code
🙁 Actual behavior
In the first set of nested scopes,
typeof xis narrowed tostring | 0by the firstif, and then"hello" | 0by the second if. This behavior is correct.In the second set of nested scopes,
typeof xis narrowed tostring | 0by the firstif, but is narrowed to0by the second if.🙂 Expected behavior
"hello"is a valid part of the subset ofstring, and should be included in the union type. The types derived from these two methods should be identical.