<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="">21 февр. 2018 г., в 11:50, T.J. Crowder <<a href="mailto:tj.crowder@farsightsoftware.com" class="">tj.crowder@farsightsoftware.com</a>> написал(а):</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class=""><div class="">On Wed, Feb 21, 2018 at 5:15 AM, Александр Ефремов <<a href="mailto:mr.efrem@gmail.com" target="_blank" class="">mr.efrem@gmail.com</a>> wrote:</div><div class="">></div><div class="">> I don’t understand how it will be comfortable to write</div><div class="">> decorators for checking arguments of every function with</div><div class="">> different set of arguments:</div><div class="">></div><div class="">> ```</div><div class="">> function a(b: PrimitiveNumber) {}</div><div class="">></div><div class="">> function a1({ x: PrimitiveBoolean, d: PrimitiveString }) {}</div><div class="">></div><div class="">> function a2(e: PrimitiveString, { f: PrimitiveNumber, g: PrimitiveString }, j: PrimitiveBoolean) {}</div><div class="">> ```</div><div class=""><br class=""></div><div class="">You wouldn't. See my `@rttc` example earlier, it would be something like:</div><div class=""><br class=""></div><div class="">```js</div><div class="">@rttc(PrimitiveNumber)</div><div class="">function a(b) {}</div><div class=""><br class=""></div><div class="">@rttc({ x: PrimitiveBoolean, d: PrimitiveString })</div><div class="">function a1({ x, d }) {}</div><div class=""><br class=""></div><div class="">@rttc(PrimitiveString, { f: PrimitiveNumber, g: PrimitiveString }, PrimitiveBoolean)</div><div class="">function a2(e, { f, g }, j) {}</div><div class="">```</div><div class=""><br class=""></div><div class="">Or perhaps the decorations go on the parameters (avoiding the repetition of names in the destructuring above), in which case I probably would have a decorator per typecheck (but the great thing with it being general is you could choose a parameterized decorator instead):</div><div class=""><br class=""></div><div class="">```js</div><div class="">function a(@primitiveNumber b) {}</div><div class=""><br class=""></div><div class="">function a1({ @primitiveBoolean x, @primitiveString d }) {}</div><div class=""><br class=""></div><div class="">function a2(@primitiveString e, { @primitiveNumber f, @primitiveString g }, @primitiveBoolean j) {}</div><div class="">```</div><div class=""><br class=""></div></div></div></div></blockquote><div><br class=""></div><div>Yes, the last variant is more comfortable, agree.</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><div class="">On Wed, Feb 21, 2018 at 5:26 AM, Aleksander Efremov <<a href="mailto:mr.efrem@gmail.com" target="_blank" class="">mr.efrem@gmail.com</a>> wrote:</div><div class="">></div><div class="">> I offered use syntax which a lot of developers already know and it</div><div class="">> would be intuitively clear to use it.</div><div class=""><br class=""></div><div class="">It also conflicts with TypeScript's static types (it looks identical, does something different), so I don't see that being adopted.</div><div class=""><br class=""></div><div class="">-- T.J. Crowder</div></div><div class=""><br class=""></div></div>
</div></blockquote></div><br class=""><div class=""><div class="">For locals could be the same variant:</div><div class=""><br class=""></div><div class="">```</div><div class="">@primitiveNumber const a = sum(1, 2);</div><div class="">```</div><div class=""><br class=""></div><div class="">It’s good point!</div></div><div class=""><br class=""></div></body></html>