<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">Le 27 mars 2019 à 18:26, Michael Theriot <<a href="mailto:michael.lee.theriot@gmail.com" class="">michael.lee.theriot@gmail.com</a>> a écrit :</div><br class="Apple-interchange-newline"><div class=""><div style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">Would an error at runtime or compiletime occur here?</div><br class="Apple-interchange-newline"></div></blockquote></div><br class=""><div class="">The check cannot be reliably done at compile time in general; it must be a runtime check. (Tools may provide partial static analysis, but that’s an extra.)</div><div class=""><br class=""></div><div class="">The simplest reason is that statically typed code must run together with non-statically typed code.</div><div class=""><br class=""></div><div class="">And even ignoring legacy code, it is not desirable to have static types everywhere; for instance, `Array.prototype.sort()` must continue to work with both arrays of strings and arrays of numbers, and even with arrays of mixed types.</div><div class=""><br class=""></div><div class="">And even if everything everywhere was statically typed, you still cannot statically analyse situations like: `a = object[Math.random() < 0.5 ? "method_returning_number" : "method_returning_string"]()`.</div><div class=""><br class=""></div><div class=""><div class=""></div></div><blockquote type="cite" class=""><div class=""><div class="">If it is a runtime error, is it optimal for the engine to keep track of typed variables vs regular for the same value?</div></div></blockquote><div class=""><br class=""></div><div class="">Today’s JS engines typically do already clever speculative optimisations based on expected types. For example: <a href="https://stackoverflow.com/a/46144917" class="">https://stackoverflow.com/a/46144917</a>. So, I guess, it depends...</div><div class=""><br class=""></div><div class="">—Claude</div><div class=""><br class=""></div></body></html>