microsoft / TypeScript

TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
https://www.typescriptlang.org
Apache License 2.0
101.12k stars 12.5k forks source link

Allow decorated accessor properties to have a different type #60200

Open NullVoxPopuli opened 1 month ago

NullVoxPopuli commented 1 month ago

🔍 Search Terms

I was pretty sure an issue already existed for this, but I couldn't find it. Hopefully opening a new issue (to maybe be closed again) will improve SEO.

Here is what I searched for:

I did find this related issue:

✅ Viability Checklist

⭐ Suggestion

Allow decorator's return type, ClassAccessorDecoratorResult to specify a different Value-type than what is on the right-hand side of the equals.

Here is how TS 5.6.3 handles this situation today.

📃 Motivating Example

For example, it should be possible to author this with 0 errors:

class Demo {
  @unwrap accessor num = { wrapped: 2 };
  //               ^? => number

  get usage() {
    expectTypeOf(this.num).toEqualTypeOf<number>();
  }
}

💻 Use Cases

  1. Reactivity
  2. Hiding complex behaviors from the user
  3. Unwrapping private objects into public API (the example in the playground link)
shigma commented 2 weeks ago

A related issue for method decorators: https://github.com/microsoft/TypeScript/issues/49229