Closed
Description
🔎 Search Terms
d.ts emit type error
🕗 Version & Regression Information
- This is a compile error when consuming a d.ts file emitting by the same version and configuration of TypeScript
- This repros in all versions I have tested (5.0.6, 5.1.6 and 5.3.2)
- Earlier version error when compiling the input file, so they could not run this scenario.
⏯ Playground Link
💻 Code
export function enumFromStrings<const Members extends readonly string[]>() {
type Part1 = {
[key in keyof Members as Members[key] extends string
? Members[key]
: never]: Members[key];
};
type Part2 = { [Property in keyof Part1]: Part1[Property] };
return Object.create(null) as Part2;
}
🙁 Actual behavior
Emits d.ts:
export declare function enumFromStrings<const Members extends readonly string[]>(): { [Property in keyof { [key in keyof Members as Members[key] extends string ? Members[key] : never]: Members[key]; }]: { [key in keyof Members as Members[key] extends string ? Members[key] : never]: Members[key]; }[Property]; };
Which errors:
Type 'Property' cannot be used to index type '{ [key in keyof Members as Members[key] extends string ? Members[key] : never]: Members[key]; }'.
🙂 Expected behavior
I expect TypeScript to either error when trying to emit a d.ts file, or generate a valid d.ts file it can consume without error.
Additional information about the issue
I have a workaround for the case where I hit this, so I'm mainly reporting this incase it helps TypeScript development.