Skip to content

Missing computed properties in declaration emit #61068

Open
@DanielRosenwasser

Description

@DanielRosenwasser

With #60052, we now emit qualified names rather than generate an index signature for computed names in classes; however, this now puts us in an awkward place where regardless of errors, declaration emit diverges on isolatedDeclarations.

Playground Links:

export const greeting: unique symbol = Symbol();
export const count: unique symbol = Symbol();

export class MyClass1 {
    [greeting]: string = "world";
    [count]: number = 42;
}

export enum PropertyNames {
    greeting = "greeting",
    count = "count",
}

export class MyClass2 {
    [PropertyNames.greeting]: string = "world";
    [PropertyNames.count]: number = 42;
}

export let prop!: string;

export class MyClass3 {
    [prop]: () => void = () => {}
}

Compared to --isolatedDeclarations false The declaration emit lacks expected contents in MyClass1 and MyClass2:

  export declare const greeting: unique symbol;
  export declare const count: unique symbol;
  export declare class MyClass1 {
-     [greeting]: string;
-     [count]: number;
  }
  export declare enum PropertyNames {
      greeting = "greeting",
      count = "count"
  }
  export declare class MyClass2 {
-     [PropertyNames.greeting]: string;
-     [PropertyNames.count]: number;
  }
  export declare let prop: string;
  export declare class MyClass3 {
      [prop]: () => void;
  }

It is surprising that prop is emitted regardless of --isolatedDeclarations, but not the other contents.

Metadata

Metadata

Assignees

No one assigned

    Labels

    In DiscussionNot yet reached consensusSuggestionAn idea for TypeScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions