Settings

Theme

Ask HN: TS: Why isn't union type in object field extracted to out of the object?

3 points by acomagu 6 years ago · 1 comment · 1 min read


I think these type should be equal:

  { a: string | undefined }
  { a: string } | { a: undefined }
These mean same set of values. And if these are equals, the following works:

  Exclude<{ a: string | undefined }, { a: string }>   // => { a: undefined }
But it don't work as I expected. Because { a: string | undefined } is not { a: string } | { a: undefined }.

If it works, Exclude<A, B> could be considered as subtraction of set in mathematical context. I think there is big deals if these types are equals. Why not? And please tell me related GitHub issues if you know.

valand 6 years ago

Must be happening for a reason: - Type equivalence is an edge case not covered yet - Type equivalence calculation is too expensive so that compilation time is preferred than type equivalence completeness

If you would, please post it in issues, that'll be great https://github.com/microsoft/TypeScript/issues

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection