Skip to content

Conversation

@jakebailey
Copy link
Member

@jakebailey jakebailey commented Dec 4, 2025

Fixes #2217
Fixes #989

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes a critical bug in the canHaveLiteralInitializer function where the logic was inverted. The function now correctly returns true for non-private properties and false for private properties, aligning with TypeScript's declaration emit behavior.

Key Changes:

  • Fixed inverted boolean logic in canHaveLiteralInitializer (changed != 0 to == 0)
  • Public/protected readonly properties now correctly emit literal initializers in declaration files
  • Private readonly properties correctly omit literal initializers in declaration files

Reviewed changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated no comments.

Show a summary per file
File Description
internal/transformers/declarations/util.go Fixed boolean logic bug - non-private properties can have literal initializers, private properties cannot
testdata/baselines/reference/submodule/compiler/isolatedDeclarationsAddUndefined.js Updated baseline showing public readonly properties now correctly emit with literal initializers (readonly r = 1)
testdata/baselines/reference/submodule/compiler/isolatedDeclarationsAddUndefined.js.diff Reduced diff showing convergence with TypeScript behavior
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsExpressions.js Updated baseline with multiple readonly const properties emitting literal initializers correctly
testdata/baselines/reference/submodule/compiler/isolatedDeclarationErrorsExpressions.js.diff Reduced diff showing convergence
testdata/baselines/reference/submodule/compiler/initializerWithThisPropertyAccess.js Updated baseline showing public readonly properties emit initializers while respecting privacy
testdata/baselines/reference/submodule/compiler/initializerWithThisPropertyAccess.js.diff Eliminated diff section showing full convergence
testdata/baselines/reference/submodule/compiler/declarationEmitPrivateReadonlyLiterals.js Updated baseline confirming private readonly properties correctly omit literal initializers
testdata/baselines/reference/submodule/compiler/declarationEmitPrivateReadonlyLiterals.js.diff Eliminated diff section showing full convergence
testdata/baselines/reference/submodule/compiler/declarationEmitEnumReadonlyProperty.js Updated baseline showing enum initializers preserved for public readonly properties
testdata/baselines/reference/submodule/compiler/declarationEmitEnumReadonlyProperty.js.diff Eliminated diff section showing full convergence
testdata/baselines/reference/submodule/compiler/declarationEmitConstantNoWidening.js Updated baseline showing string literal initializers preserved correctly
testdata/baselines/reference/submodule/compiler/declarationEmitConstantNoWidening.js.diff Eliminated diff section showing full convergence
testdata/baselines/reference/submodule/compiler/computedEnumTypeWidening.js Updated baseline showing computed enum initializers preserved for public readonly properties
testdata/baselines/reference/submodule/compiler/computedEnumTypeWidening.js.diff Eliminated diff section showing full convergence

@brokenmass
Copy link

LGTM, thanks !

@jakebailey jakebailey enabled auto-merge December 4, 2025 17:41
@jakebailey jakebailey added this pull request to the merge queue Dec 4, 2025
Merged via the queue into main with commit fb0c169 Dec 4, 2025
29 checks passed
@jakebailey jakebailey deleted the jabaile/fix-2217 branch December 4, 2025 19:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Readonly properties do not use constant type d.ts content different with tsc

4 participants