<div dir="ltr">How is that behaviour related to the use cases presented by OP? Would such behaviour not lead to false-positive relevant to the 2 use cases?</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jun 14, 2019 at 9:36 PM Ron Buckton <<a href="mailto:Ron.Buckton@microsoft.com">Ron.Buckton@microsoft.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US">
<div class="gmail-m_7041635957420731757WordSection1">
<p class="MsoNormal">> `nameof whatever` → `Object.keys({ whatever })[0]`, but I'm a bit confused why it'd be better to type `nameof foo` in code, rather than `'foo'` - if you change `foo` to `bar`, you have to change both of them anyways.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">If you are using an editor that supports rename refactoring, its generally easier to rename the symbol `foo` and have all references (including `nameof foo`) be updated. You cannot safely automatically rename `'foo'` to `'bar'` since an
 editor or language service cannot guarantee that by the string `'foo'` you meant “the text of the identifier `foo`”.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><b>From:</b> es-discuss <<a href="mailto:es-discuss-bounces@mozilla.org" target="_blank">es-discuss-bounces@mozilla.org</a>> <b>
On Behalf Of </b>Jordan Harband<br>
<b>Sent:</b> Friday, June 14, 2019 2:29 PM<br>
<b>To:</b> guest271314 <<a href="mailto:guest271314@gmail.com" target="_blank">guest271314@gmail.com</a>><br>
<b>Cc:</b> es-discuss <<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a>><br>
<b>Subject:</b> Re: Re: What do you think about a C# 6 like nameof() expression for<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">`nameof whatever` → `Object.keys({ whatever })[0]`, but I'm a bit confused why it'd be better to type `nameof foo` in code, rather than `'foo'` - if you change `foo` to `bar`, you have to change both of them anyways.<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Fri, Jun 14, 2019 at 1:31 PM guest271314 <<a href="mailto:guest271314@gmail.com" target="_blank">guest271314@gmail.com</a>> wrote:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Am neither for nor against the proposal. Do not entertain "like"s or "dislike"s in any field of endeavor. Am certainly not in a position to prohibit anything relevant JavaScript. Do what thou wilt shall be the whole of the Law.<br>
<br>
Have yet to view a case where code will be "broken" by ```nameof``` not being a JavaScript feature. "robustness", as already mentioned, is a subjective adjective that is not capable of being objectively evaluated as to code itself. That description is based
 on preference or choice.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">In lieu of the proposal being specificed, use the posted code example of ```Object.keys()``` that "works". <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">```<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">function func1({userName = void 0} = {}) {<br>
  console.assert(userName !== undefined, [{userName}, 'property needs to be defined'])<br>
}<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">```<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">provides a direct indication that the property value is required to be defined. Note that the example code posted thus far does not first check if ```options``` is passed at all, for which ```nameof``` will not provide any asssitance.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Usually try to meet requirement by means already available in FOSS browsers. Have no interest in TypeScript or using an IDE.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">FWIW, have no objection to the proposal.<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Fri, Jun 14, 2019 at 7:53 PM Stas Berkov <<a href="mailto:stas.berkov@gmail.com" target="_blank">stas.berkov@gmail.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">guest271314, what is you point against `nameof` feature?<br>
<br>
If you don't like it - don't use it. Why prohibit this feature for<br>
those who find it beneficial?<br>
<br>
I see `nameof` beneficial in following cases<br>
<br>
Case 1. Function guard.<br>
```<br>
function func1(options) {<br>
...<br>
   if (options.userName == undefined) {<br>
       throw new ParamNullError(nameof options.userName); //<br>
`ParamNullError` is a custom error, derived from `Error`, composes<br>
error message like "Parameter cannot be null: userName".<br>
 // `Object.keys({options.userName})[0]` will not work here<br>
   }<br>
}<br>
```<br>
<br>
Case 2. Accessing property extended info<br>
Those ES functions that accept field name as string.<br>
e.g.<br>
```<br>
const descriptor1 = Object.getOwnPropertyDescriptor(object1, 'property1');<br>
```<br>
vs<br>
```<br>
const descriptor1 = Object.getOwnPropertyDescriptor(object1, nameof<br>
object1.property1);<br>
 // `Object.keys({options1.property1})[0]` will not work here<br>
```<br>
2nd variant (proposed) has more chances not to be broken during<br>
refactoring (robustness).<br>
<br>
It would make devs who use IDE more productive and make their life<br>
easier. Why not give them such possiblity and make them happy?<u></u><u></u></p>
</blockquote>
</div>
<p class="MsoNormal">_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmail.mozilla.org%2Flistinfo%2Fes-discuss&data=02%7C01%7Cron.buckton%40microsoft.com%7C9fdfd117bd4346c8001b08d6f10f6d33%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636961445923877688&sdata=d5aVBUC9Aptqxm9l9bzlqzyKvKKJhVXg7RGosfnXN8M%3D&reserved=0" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><u></u><u></u></p>
</div>
</div>

</blockquote></div>