Microsoft/TypeScript
GitHub ã§èŠãTSC emits invalid .d.ts file with reserved keywords in identifier position
Open
#53,111 opened on 2023幎3æ6æ¥
BugDomain: Declaration EmitHelp Wanted
Repository metrics
- Stars
- Â (48,455 stars)
- PR merge metrics
-  (å¹³åããŒãž 6d 17h) (30d ã§ 9 merged PRs)
説æ
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.tsfiles are generated both if the input is a.jsor.tsfile - I did not find any combination of flags/options/versions that would generate a valid
.d.tsfile. - 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;
}