Open
Description
In the following examples, I've defined 4 different versions of a Json
type, where they differ on their description of object types.
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 ✅
namespace ObjectIsMappedTypeOnString {
export type Json =
| string
| number
| boolean
| null
| Json[]
| { [K in string]: Json }
;
}
// No errors ✅
namespace ObjectIsIndexSignature {
export type Json =
| string
| number
| boolean
| null
| Json[]
| { [key: string]: Json }
;
}
// Errors ❌
namespace ObjectIsRecord {
export type Json =
| string
| number
| boolean
| null
| Json[]
| Record<string, Json>
;
}
// Error ❌
namespace ObjectIsGenericMappedType {
type JsonProperties<K extends PropertyKey> = {
[P in K]: Json
};
export type Json =
| string
| number
| boolean
| null
| Json[]
| JsonProperties<Json>
;
}
I would expect all of these to work.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment