Is Case 1 equivalent to a briefer version of ``` if (userName == undefined) { throw new Error(`Argument cannot be null: ${Object.keys({userName})[0]}`); } ```
? If not, how is ```nameof``` different? What is the difference between the use of ```message.hasOwnProperty(property)``` and ```nameof msg.expiration_utc_time```? > You get more robust code. How is "robust" objectively determined? On Fri, Jun 14, 2019 at 5:21 PM Stas Berkov <stas.ber...@gmail.com> wrote: > ES can befit from `nameof` feature the same way as TS. There is no TS > specific in it. > It was ask to introduce in TS as a workaround since TS is considered as > extention of ES. > > Case 1. Function guard. > ``` > function func1(param1, param2, param3, userName, param4, param5) { > if (userName == undefined) { > throw new ArgumentNullError(nameof userName); // > `ArgumentNullError` is a custom error, derived from `Error`, composes error > message like "Argument cannot be null: userName". > } > } > ``` > > Case 2. Access extended information an object property. > Assume a function > ``` > function protoPropertyIsSet(message, property) { > return message != null && message.hasOwnProperty(property); > } > ``` > Then in code you use it as `if (protoPropertyIsSet(msg, > "expiration_utc_time")) {... }`. > Having `nameof` would allow you to do that `if (protoPropertyIsSet(msg, > nameof msg.expiration_utc_time)) {... }`. > You get more robust code. > > On Fri, Jun 14, 2019 at 5:46 PM Augusto Moura <augusto.borg...@gmail.com> > wrote: > >> Can you list the benefits of having this operators? Maybe with example >> use cases >> >> If I understand it correctly, the operator fits better in compiled >> (and typed) languages, most of the use cases don't apply to dynamic >> Javascript >> The only legit use case I can think of is helping refactor tools to >> rename properties (but even mismatch errors between strings and >> properties names can be caught in compile time using modern >> Typescript) >> >> Em sex, 14 de jun de 2019 às 10:05, Stas Berkov >> <stas.ber...@gmail.com> escreveu: >> > >> > Can we revisit this issue? >> > >> > >> > In C# there is `nameof`, in Swift you can do the same by calling >> > >> > ``` >> > >> > let keyPath = \Person.mother.firstName >> > >> > NSPredicate(format: "%K == %@", keyPath, "Andrew") >> > >> > ``` >> > >> > Let's introduce `nameof` in ES, please. >> > >> > >> > Devs from TypeScript don't want to introduce this feature in TypeScript >> unless it is available in ES ( >> https://github.com/microsoft/TypeScript/issues/1579 ) >> > >> > This feature is eagarly being asked by TypeScript community. >> > >> > >> > I understand there are couple issues related to `nameof` feature in ES. >> They are: minification and what to do if user already has `nameof` function. >> > >> > >> > Minification. >> > >> > 1. If your code to be minimized be prepared that variable names will >> also change. >> > >> > 2. (just a possibility) Minimizer can have option to replace >> `nameof(someVar)` with result of `nameof` function. >> > >> > >> > >> > What if user already has `nameof` function. >> > >> > 1. To maintain status quo we can user `nameof` function having priority >> over newly introduced language feature. >> > >> > 2. OR we can use `typeof` syntax, e.g. `nameof msg.userName` (// >> returns "userName" string) >> > >> > _______________________________________________ >> > es-discuss mailing list >> > es-discuss@mozilla.org >> > https://mail.mozilla.org/listinfo/es-discuss >> >> >> >> -- >> Atenciosamente, >> >> Augusto Borges de Moura >> > _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss