Skip to content

Cannot describe recursive type aliases like JSON in terms of generic mapped types #57034

Description

In the following examples, I've defined 4 different versions of a Json type, where they differ on their description of object types.

Playground link here.

In the first two, I've defined them in terms of mapped types with a concrete key of string, and an object type with a string index signature. TypeScript has no issues with either of those.

On the other hand, the last two are described with Record, or with a helper mapped type fed in a string key type.

// No errors ✅namespaceObjectIsMappedTypeOnString{exporttypeJson=|string|number|boolean|null|Json[]|{[Kinstring]: Json};}// No errors ✅namespaceObjectIsIndexSignature{exporttypeJson=|string|number|boolean|null|Json[]|{[key: string]: Json};}// Errors ❌namespaceObjectIsRecord{exporttypeJson=|string|number|boolean|null|Json[]|Record<string,Json>;}// Error ❌namespaceObjectIsGenericMappedType{typeJsonProperties<KextendsPropertyKey>={[PinK]: Json};exporttypeJson=|string|number|boolean|null|Json[]|JsonProperties<Json>;}

I would expect all of these to work.

Metadata

Metadata

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