Bug Report
When using noUncheckedIndexedAccess, the type inferred by my code is affected by whether I access the second item in a tuple or not.
🔎 Search Terms
tuple, undefined, type, omit, noUncheckedIndexedAccess, error, index, array, infer, nested
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about
noUncheckedIndexedAccess
- I was unable to test this on prior versions because
--noUncheckedIndexedAccess didn't exist before those versions
⏯ Playground Link
Playground link with relevant code
💻 Code
declare const fn: <T extends string[]>(t: T) => [T, string[]];
const [[x]] = fn(['1']);
console.log(x.toLowerCase());
It seems that the inferred type for fn is:
const fn: <string[]>(t: string[]) => [string[], string[]]
Since the first item is an array rather than a tuple, items in that array have type string | undefined.
If I change the assignment to be:
const [[x], []] = fn(['1']);
It gets inferred as:
const fn: <[string]>(t: [string]) => [[string], string[]]
Since the first item is a tuple rather than an array, items in that tuple have type string.
🙁 Actual behavior
x has type string | undefined
🙂 Expected behavior
x has type string.
Bug Report
When using
noUncheckedIndexedAccess, the type inferred by my code is affected by whether I access the second item in a tuple or not.🔎 Search Terms
tuple, undefined, type, omit, noUncheckedIndexedAccess, error, index, array, infer, nested
🕗 Version & Regression Information
noUncheckedIndexedAccess--noUncheckedIndexedAccessdidn't exist before those versions⏯ Playground Link
Playground link with relevant code
💻 Code
It seems that the inferred type for
fnis:Since the first item is an array rather than a tuple, items in that array have type
string | undefined.If I change the assignment to be:
It gets inferred as:
Since the first item is a tuple rather than an array, items in that tuple have type
string.🙁 Actual behavior
xhas typestring | undefined🙂 Expected behavior
xhas typestring.