You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// Problem 1: Error spans are useless in contextually-typed array/object literal casestypeKind='foo'|'ball';// Error is on declared identifier instead of bad elementconstka: Kind[]=['foo','ball','xxxx','foo','ball'];// Error is on declared identifier instead of bad keyconstko: {[s: string]: Kind}={'x': 'foo','y': 'xxxx','z': 'foo'};// Problem 2: Subtype reduction screwage in the presence of contextual typetypeOK={ok?: boolean};// No error??consto1: OK='??' ? {ok: 'wat'} : {};// Problem 3: Aliased subtype reduction screwageconstobj='??' ? {ok: 'wat'} : {};// No error??consto2: OK=obj;
Hypotheses:
Computing a union type in the presence of a contextual type is a waste of time
If we do this, we can produce good error spans?
Unioning { x: T } with a fresh { } should produce { x?: T }
Unioning a fresh object literal with { } should do something special
Unioning fresh { x: number, y: number } | { x: number } should produce { x: number, y?: number}
The text was updated successfully, but these errors were encountered:
@Aleksey-Bykov The issue is that { x: T } | {} is too weak. Anything is assignable to it because anything is assignable to {}. The idea is to instead infer the type { x: T? } which says that if there is an x property it must be of type T.
mhegazy
added
Fixed
A PR has been merged for this issue
and removed
Needs Proposal
This issue needs a plan that clarifies the finer details of how it could be implemented.
labels
Oct 30, 2017
Hypotheses:
{ x: T }
with a fresh{ }
should produce{ x?: T }
{ }
should do something special{ x: number, y: number }
|{ x: number }
should produce{ x: number, y?: number}
The text was updated successfully, but these errors were encountered: