Closed lucacasonato closed 4 months ago
For completeness: This requires to traverse into every block-like scope to potentially find return types:
export function foo() {
for (let i = 0; i < 10; i++) {
if (i === 10) {
return 42
}
}
}
We already do that 👍
Right now we sometimes incorrectly infer the function return type due to our
return
statement analysis. The only cases where we can safely infervoid
is when:Notably, we can not infer a function expression from expressions such as
() => { n() }
, because the return type may benever
ifn()
returnsnever
.Sync functions: https://www.typescriptlang.org/play/?#code/CYUwxgNghgTiAEAzArgOzAFwJYHtXxAA8sMAKASgC55UQA3EGAbgCgWiAHHGDJNTXPigV4AbxbxJBYmXKsAvm07deKdNjzwARiPFT4cDMhioWi9oS48+6wfDC6JUrInikA5hBxaoEACoAFlgAzuRiTvqSRCQUrPqK+obGpubK1moCmsCO+mZKlir2eMG8CAC8bmFlAHzh+tGyCvlWvGDFqvAVIjV1UkkmeRYtRagl8O6dlZ21es6uHl4+-kGhvZHSMXIR8Al9IEYDqQXWbaO8AZPdM9uDaa3t8FiTGRqoOVINsbfH92fwAFbPfivd6SfopZqFU5jADWQNseFBj3mnm8vkCITCs3Wny28W24O+w2hvAg8MybyxN3kQA Async functions: https://www.typescriptlang.org/play/?#code/CYUwxgNghgTiAEAzArgOzAFwJYHtXxAA8sMAKASgC55UQA3EGAbgCgWiAHHGDeKAZwCe6JGky58UCvADeLeAoLEy5VgF82nbrwHCwo9NjzwARtLmL4cDMhioWG9oS48+QkSkMT4Yc-MVYiPCkAOYQOCZQEAAqABZY-OSy-pYKRCQUrJYalta29o5arroeYkb4wH6WDprO2j54-LwIALxuesFJLQB8yZbpKuq1LrxgjbxBbSX60j19inl2NU4jDahN8CHwU+4zXb0WAUGh4ZEx8YnzqUoZqinwOQsgNkuFda5j67yx2+0iswd7ssiqNxvAsL9pgZxHgqooBplge9QV94AArSG7aHlOEKRYFYb1T4bADWmI6nhhqFx4OOYQiUTiCSSh2uCLu2Xu+KRq2JvAg5NKXlhLLYaiAA