gleam-lang/gleam

Invalid TypeScript Declarations for property named `constructor` and other javascript keywords

Open

Aperta il 16 apr 2026

Vedi su GitHub
 (1 commento) (0 reazioni) (0 assegnatari)Rust (21.417 star) (960 fork)batch import
good first issuehelp wantedhigh priority

Descrizione

Given this gleam code:

pub type Box {
  Box(constructor: Int)
}

And this gleam.toml:

name = "app"
version = "1.0.0"

target = "javascript"

[dependencies]
gleam_stdlib = ">= 0.44.0 and < 2.0.0"

[dev_dependencies]
gleeunit = ">= 1.0.0 and < 2.0.0"

[javascript]
typescript_declarations = true

The generated typescript declarations are invalid with the following error:

Similarly when you use other property names such as prototype or then, the generated typescript declarations are valid, however do not match the generated JavaScript classes.

For example:

pub type Box {
  Box(prototype: Int)
}
export class Box extends $CustomType {
  constructor(prototype) {
    super();
    this.prototype$ = prototype;
  }
}
export class Box extends _.CustomType {
  /** @deprecated */
  constructor(prototype: number);
  /** @deprecated */
  prototype: number;
}

Here the typescript autocompletion would suggest box.prototype even though it should be box.prototype$.

Maybe this is not important, because they are deprecated, but wanted to bring it up anyways.

This is on gleam 1.15.4

Guida contributor