Brendan Eich (2008-05-26T19:04:52.000Z)
forbes at lindesay.co.uk (2019-04-24T10:59:36.703Z)
On May 26, 2008, at 11:57 AM, Graydon Hoare wrote: >> >> * I thought "like" was dead. How did it get revived? > > As a (value * type) binary operator, rather than as a type. It also > (presently) has a form in which it can annotate a function parameter, > which implicitly causes the an assertion of the operator against the > provided type when the function is entered. This annotation > behavior on > function parameter lists is something I'm not terribly pleased > with, but > then, the most natural boundary between annotated and unannotated code > appears to be that of a function call, so it's possibly sensible to > leave extra conveniences there. It's particularly helpful on return types to avoid forcing control to flow through a single exit block, in which to write a like expression in an if whose consequent throws a new TypeError (I got tired just writing that ;-). But it helps also on arguments: ```js function f(a like T, b like U, c like V) { ... } ``` instead of ```js function f(a, b, c) { if (!(a like T)) throw new TypeError; if (!(b like U)) throw new TypeError; if (!(c like V)) throw new TypeError; ... } ```