-
Notifications
You must be signed in to change notification settings - Fork 13.2k
Closed
Labels
DuplicateAn existing issue was already createdAn existing issue was already created
Description
Bug Report
🔎 Search Terms
index type, indexed access type, index access operator, extends, Exclude, conditional type
🕗 Version & Regression Information
This is the behavior in every version I tried (3.3.3 to 4.3.2), and I reviewed the FAQ for entries about indexed access types.
⏯ Playground Link
Playground link with relevant code
💻 Code
interface A {
details1?: {y:string};
details2?: {x:string};
}
function create<PropName extends keyof A>(
name: PropName , a: A): Exclude<A[PropName], undefined> {
const x: A[PropName] = a[name];
if (x) return x; // Type error: Type 'A[PropName]' is not assignable to type 'Exclude<A[PropName], undefined>'.
throw new Error();
}🙁 Actual behavior
TypeScript complains that x in if (x) return x; is of type 'A[PropName]' and is not assignable to type 'Exclude<A[PropName], undefined>', because it assumes that x can be undefined.
🙂 Expected behavior
I would have expected that this works, as return x is the consequence of the conditional if (x), so x cannot be undefined.
Thanks for taking the time to look at this!
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
DuplicateAn existing issue was already createdAn existing issue was already created