Open
Description
π Search Terms
noUncheckedIndexedAccess, union, undefined
π Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about
--noUncheckedIndexedAccess
β― Playground Link
π» Code
const nums: { [k: string]: number } = Math.random() < 0.5 ? { a: 1 } : { b: 2 };
const str = { a: "hello" }
// with --noUncheckedIndexedAccess on
const hmm = (Math.random() < 0.5 ? nums.a : str.a) // string | number | undefined
const wha = (Math.random() < 0.5 ? nums : str).a // string | number <-- π
π Actual behavior
The type of wha
is string | number
, completely ignoring the possibility that it might be undefined
, even though --noUncheckedIndexedAccess
is enabled. Looks like unions of types with index signatures and known keys lose the --noUncheckedIndexedAccess
behavior.
π Expected behavior
wha
should be of type string | number | undefined
, just like hmm
, since indexed access into a union should look like a union of indexed accesses.
Additional information about the issue
This is related to #50474. Itβs also related to #47531, which had specifically to do with never[]
and so the focus was on avoiding never[]
as opposed to investigating what happened to the indexed access. ( #47531 (comment) )
Ran into this when looking at a Stack Overflow question