Microsoft/TypeScript

'in' does not remove undefined from indexed value (with noUncheckedIndexedAccess)

Open

#61,389 opened on 2025幎3月10日

GitHub で芋る
 (3 comments) (0 reactions) (0 assignees)TypeScript (6,726 forks)batch import
Domain: check: Control FlowHelp WantedPossible Improvement

Repository metrics

Stars
 (48,455 stars)
PR merge metrics
 (平均マヌゞ 6d 17h) (30d で 9 merged PRs)

説明

🔎 Search Terms

in operator, noUncheckedIndexedAccess

🕗 Version & Regression Information

Tested 5.8.2 and 5.9.0-dev.20250310

⏯ Playground Link

https://www.typescriptlang.org/play/?noUncheckedIndexedAccess=true&ts=5.8.2#code/MYewdgzgLgBAhgJwQLhmArgWwEYFMEDaAujALwwECMANDAEy0DMRA3AFCiSwCWAJgB6oMOfGXrtuAMxgAKPvxjcw8JAEoYAbzYwdMTtBiC0WPAjGJC81tt36QAG1wA6eyADmM-qvYBfNkA

💻 Code

With an array:

const arr: number[] = [1, 2, 3];
const idx: number = 2;
if (idx in arr) {
    const x: number = arr[idx];
    console.log(x);
}

With a map/object:

const map: Record<string, number> = { a: 1 };
const key: string = "a";
if (key in map) {
    const x: number = map[key];
    console.log(x);
}

🙁 Actual behavior

Type 'number | undefined' is not assignable to type 'number'.
  Type 'undefined' is not assignable to type 'number'.

🙂 Expected behavior

Expected 'in' operator to guarantee that the result of indexing is not undefined in this branch.

Additional information about the issue

No response

コントリビュヌタヌガむド