<div dir="auto"><div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="quoted-text">> I hope this explains it a bit for you.<br>
<br>
</div>Sorry, but it didn't explain much. What to you mean by "that'd break when<br>
using multiple returns with different types" ? Can you throw some simple<br>
example?<br></blockquote></div></div></div><div dir="auto"><br></div><div dir="auto">sure</div><div dir="auto"><br></div><div dir="auto">var k = new Promise((acc, rej) => window.setTimeout(1000, ()=> acc(randomPromiseSubtype)));</div><div dir="auto"><br></div><div dir="auto">~=</div><div dir="auto"><br></div><div dir="auto">var k = (async function() {await window.setTimeout(1000); return randomPromiseSubtype})();</div><div dir="auto"><br></div><div dir="auto">type of var k cannot be determined when the promise is made, due to the timeout not yet having returned. Ahead-of-time determining of type is really impossible with unpure functions, which must be available in async functions (e.g. for fetch). You can wrap your async function call in a custom promise (which would have your desired result), changing promise instance class hierarchies on-the-fly would make promises much less deterministic than what they are now, and would​ introduce confusion: typeof k would change depending on how long your program has run.</div><div dir="auto"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"></blockquote></div></div></div></div>