microsoft / microsoft/TypeScript

public static fields without initializer are removed even with `useDefineForClassFields=true`

Ouverte
#61,671 0 commentaires 0 réactions 1 personne assignée Voir sur GitHub

@rbuckton y travaille déjà.

Depuis le 8/5/2025.

Needs Investigation
Langage dominant
Go
Étoiles
111k
Forks
14.3k
Merge moyen
2 j 4 h
PR mergées (30 j)
132

Description

### 🔎 Search Terms

static class field, useDefineForClassFields

### 🕗 Version & Regression Information

This bug exists at least with v3.7.5 and v5.8.3.

### ⏯ Playground Link

https://www.typescriptlang.org/play/?useDefineForClassFields=true&jsx=0&ts=5.8.3#code/MYGwhgzhAEBiD29oG8BQ1oQC5iwS2GgDNEAuaAVwDsATAUyLyrpoG5V1ph4rsAnCsCzw+ACgCUKThm694IOgDoQ8AOaiA5CXgboTOInGcAvqlPMA7gfgTUQA

### 💻 Code

```ts
class Foo {
static foo: undefined;

constructor() {
console.log('foo' in Foo)
}
}
new Foo()
```

### 🙁 Actual behavior

`console.log('foo' in Foo)` outputs `false` after transformed.

### 🙂 Expected behavior

`console.log('foo' in Foo)` to output `true` after transformed. Because removing `: undefined` from the input and running that outputs `true`.

### Additional information about the issue

esbuild, babel, SWC transforms correctly ([esbuild try](https://esbuild.github.io/try/#dAAwLjI1LjQAewogIGxvYWRlcjogJ3RzJywKICB0YXJnZXQ6ICdlczIwMTcnLAogIHRzY29uZmlnUmF3OiB7CiAgICBjb21waWxlck9wdGlvbnM6IHsKICAgICAgdXNlRGVmaW5lRm9yQ2xhc3NGaWVsZHM6IHRydWUKICAgIH0KICB9Cn0AY2xhc3MgRm9vIHsKICBzdGF0aWMgZm9vOiB1bmRlZmluZWQ7CgogIGNvbnN0cnVjdG9yKCkgewogICAgY29uc29sZS5sb2coJ2ZvbycgaW4gRm9vKQogIH0KfQpuZXcgRm9vKCkK), [babel repl](https://babeljs.io/repl#?browsers=chrome%2073&build=&builtIns=false&corejs=3.21&spec=false&loose=false&code_lz=MYGwhgzhAEBiD29oG8BQ1oQC5iwS2GgDNEAuaAVwDsATAUyLyrpoG5V1ph4rsAnCsCzw-ACgCUKThm694IOgDoQ8AOaiA5CXgboTOInGcAvqlPMA7gfgTUQA&forceAllTransforms=false&modules=false&shippedProposals=false&evaluate=false&fileSize=false&timeTravel=false&sourceType=module&lineWrap=false&presets=env%2Ctypescript&prettier=false&targets=&version=7.25.8&externalPlugins=&assumptions=%7B%7D), [SWC playground](https://play.swc.rs/?version=1.11.24&code=H4sIAAAAAAAAAyWMsQ3AIAwEe0%2FhDmgyQNJnDwQmQkK2BEYpInYPJOX%2F3X8ovjU8RfABxKZec8AksmPnSCkzxQMmCcJNaw8q1brP%2FTsptBW5rJkbg5nXlZt0wACme0Xr4AUZI7P%2BZgAAAA%3D%3D&config=H4sIAAAAAAAAA1VQu27DMAzc%2FRWG5qBuO6RA1hbZMvULCIVOVOgFkgJqBP73SLbl2Jt4D554j6Zt1R9rdWof%2BZmHCMRI65wRHrzAf0aUDBFZk4miDpUVLlQPlnGCxplRAnRDKS7kz%2FePL1VxAs99ILeNSIw%2F2BuP50DfFpjPBu2Vs0Qo4ZpFCFo2vgwZFwPJb0iksYTdRSKfug7ZvfG9i7Pl8DJQ8mLcpIUkwYEYrRZ63F1gQ2Csty2YM970w%2FbrOrgcwrwXFin4m8V9N82yXblwTRO5tF6anbs6qpeohq2LleFLdZZmmvEJlbcmOcEBAAA%3D))

Private static fields works fine ([TS playground](https://www.typescriptlang.org/play/?useDefineForClassFields=true&jsx=0&ts=5.8.3#code/MYGwhgzhAEBiD29oG8BQ1oQC5iwS2GgGIAjMAJwC5oBXAOwBMBTAMzzqYYG5V1ph4dbORrAs8cgAoAlCj4YBQ+CCYA6EPADmk0hWjs4iaXwC+qMxwDuh+DNRA)).

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.