Skip to content

TSC emits invalid .d.ts file with reserved keywords in identifier positionΒ #53111

Open
@TiddoLangerak

Description

@TiddoLangerak

Bug Report

πŸ”Ž Search Terms

delete reserved keyword .d.ts .d.ts reserved keyword

πŸ•— Version & Regression Information

  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about invalid .d.ts types

⏯ Playground Link

Playground link with relevant code

πŸ’» Code

const obj1 = {
    delete: "foobar"
};

const obj2 = {
  x: obj1.delete
};

export default obj2;

πŸ™ Actual behavior

The emitted .d.ts file contains delete in an identifier position. This in turns triggers an error when consumed: Identifier expected. 'delete' is a reserved word that cannot be used here.

Generated .d.ts:

export default obj2;
declare namespace obj2 {
    import x = obj1.delete;
    export { x };
}
declare namespace obj1 {
    const _delete: string;
    export { _delete as delete };
}

πŸ™‚ Expected behavior

The generated .d.ts file should be valid.


Further notes

  • Invalid .d.ts files are generated both if the input is a .js or .ts file
  • I did not find any combination of flags/options/versions that would generate a valid .d.ts file.
  • I did find a workaround by altering the source file πŸ‘‡

Workaround

This issue can currently be worked around by using ["delete"] instead of .delete. E.g. this:

const obj1 = {
    delete: "foobar"
};

const obj2 = {
  x: obj1["delete"]
};

export default obj2;

Generates the following valid .d.ts:

export default obj2;
declare namespace obj2 {
    const x: string;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptHelp WantedYou can do this

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions