typescript-vs-flow
typescript-vs-flow copied to clipboard
If and unions
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
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
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 true