microsoft / microsoft/TypeScript
public static fields without initializer are removed even with `useDefineForClassFields=true`
@rbuckton ya está trabajando en esto.
Desde el 8/5/2025.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.3k
- Merge medio
- 2 d 4 h
- PR fusionados (30 d)
- 132
Descripción
### 🔎 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)).
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Evaluación
Este issue todavía no se ha evaluado.