Open
Description
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;
}