Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: explicit set useDefineForClassFields in ts templates #4280

Merged
merged 1 commit into from
Aug 26, 2021

Conversation

haoqunjiang
Copy link
Member

Description

Since TypeScript 4.3, target: "esnext" indicates that
useDefineForClassFields: true as the new default.
See microsoft/TypeScript#42663

So I'm explicitly adding this field to the tsconfigs to avoid any
confusions.

Note that lit-element projects must use
useDefineForClassFields: false because of lit/lit#3278

Vue projects must use useDefineForClassFields: true so as to support
class style prop definition in vue-class-component:
vuejs/vue-class-component#465

Popular React state management library MobX requires it to be true:
https://mobx.js.org/installation.html#use-spec-compliant-transpilation-for-class-properties

Other frameworks seem to have no particular opinion on this.

So I turned it on in all templates except for the lit-element one.

Additional context

#4279 needs to be resolved before this PR to avoid confusing users.


What is the purpose of this pull request?

  • Bug fix
  • New Feature
  • Documentation update
  • Other

Before submitting the PR, please make sure you do the following

  • Read the Contributing Guidelines.
  • Read the Pull Request Guidelines and follow the Commit Convention.
  • Check that there isn't already a PR that solves the problem the same way to avoid creating a duplicate.
  • Provide a description in this PR that addresses what the PR is solving, or reference the issue that it solves (e.g. fixes lit/lit-element#123).
  • Ideally, include relevant tests that fail without this PR but pass with it.

Since TypeScript 4.3, `target: "esnext"` indicates that
`useDefineForClassFields: true` as the new default.
See <microsoft/TypeScript#42663>

So I'm explicitly adding this field to the tsconfigs to avoid any
confusions.

Note that `lit-element` projects must use
`useDefineForClassFields: false` because of <https://github.com/lit/lit-element/issues/1030>

Vue projects must use `useDefineForClassFields: true` so as to support
class style `prop` definition in `vue-class-component`:
<vuejs/vue-class-component#465>

Popular React state management library MobX requires it to be `true`:
<https://mobx.js.org/installation.html#use-spec-compliant-transpilation-for-class-properties>

Other frameworks seem to have no particular opinion on this.

So I turned it on in all templates except for the `lit-element` one.
@Shinigami92 Shinigami92 added the p2-nice-to-have Not breaking anything but nice to have (priority) label Jul 16, 2021
@patak-dev patak-dev merged commit fe74173 into vitejs:main Aug 26, 2021
aleclarson pushed a commit to aleclarson/vite that referenced this pull request Nov 8, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
p2-nice-to-have Not breaking anything but nice to have (priority)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants