typescript-vs-flow icon indicating copy to clipboard operation
typescript-vs-flow copied to clipboard

If and unions

Open yarax opened this issue 7 years ago • 3 comments

Just found out this

http://www.typescriptlang.org/play/#src=type%20StateInit%20%3D%20%7B%0D%0A%20%20%20%20error%3A%20string%0D%0A%7D%20%7C%20%7B%0D%0A%20%20%20%20a%3A%20string%0D%0A%20%20%7D%3B%0D%0A%0D%0Adeclare%20var%20stateInit%3A%20StateInit%0D%0A%0D%0Aif%20(stateInit.error)%20%7B%0D%0A%20%20%0D%0A%7D#src=type%20StateInit%20%3D%20%7B%0D%0A%20%20%20%20error%3A%20string%0D%0A%7D%20%7C%20%7B%0D%0A%20%20%20%20a%3A%20string%0D%0A%20%20%7D%3B%0D%0A%0D%0Adeclare%20var%20stateInit%3A%20StateInit%0D%0A%0D%0Aif%20(stateInit.error)%20%7B%0D%0A%20%20%0D%0A%7D

yarax avatar Jun 06 '17 11:06 yarax

Maybe it's because you haven't assigned any value to the variable?

Assigning works: http://www.typescriptlang.org/play/#src=type%20StateInit%20%3D%20%7B%0D%0A%20%20%20%20error%3A%20string%0D%0A%7D%20%7C%20%7B%0D%0A%20%20%20%20a%3A%20string%0D%0A%20%20%7D%3B%0D%0A%0D%0Alet%20stateInit%3A%20StateInit%20%3D%20%7B%20error%3A%20'x'%20%7D%0D%0A%0D%0Aif%20(stateInit.error)%20%7B%0D%0A%20%20%0D%0A%7D%0D%0A

brunolemos avatar Mar 31 '18 19:03 brunolemos

No, that is actually a valid example. Try this:

type StateInit = {
    error: string
} | {
    a: string
    };

function test(): StateInit { 
    return { error: 'x' };
}

let stateInit: StateInit = test();

if (stateInit.error) {
  
}

vkurchatkin avatar Mar 31 '18 19:03 vkurchatkin

@vkurchatkin true

brunolemos avatar Mar 31 '18 19:03 brunolemos