fast icon indicating copy to clipboard operation
fast copied to clipboard

fix: Implicit underscore-prefixed observable properties in fast-element

Open albertor24 opened this issue 2 years ago • 1 comments

🐛 Bug Report

When creating an @observable property, an implicit property with the same name prefixed with underscore will be created. Moreover, if an explicit underscore-prefixed property is declared alongside a non-prefixed property, they will overwrite each other

💻 Repro or Code Sample

https://stackblitz.com/edit/typescript-j2eqbm?file=index.ts

const template = html`
  <h1>${x => x.myProp}</h1>
`;

class MyElement extends FASTElement {
  @observable myProp = "Just my prop";
  private _myProp = "My prop with underscore";
}

🤔 Expected Behavior

The template should show Just my prop

😯 Current Behavior

The template shows My prop with underscore

💁 Possible Solution

If it's necessary to create these implicit properties, an error should be raised if a property with underscore is explicitly defined.

🔦 Context

🌍 Your Environment

  • OS & Device: [e.g. MacOS, iOS, Windows, Linux] on [iPhone 7, PC]
  • Browser [e.g. Microsoft Edge, Google Chrome, Apple Safari, Mozilla FireFox]
  • Version [e.g. 1.8.0]

albertor24 avatar Aug 24 '23 19:08 albertor24

~I don't think we want to add overhead to runtime checking, so I'm marking this as a documentation issue, we should explicitly state that we are creating private underscore properties and that they should not be overwritten.~

After some discussion with maintainers it seems that a potential solution is to use Symbol this may however have perf implications.

janechu avatar May 29 '24 21:05 janechu