Open
Description
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
.