I am experimenting with TypeScript (4.5.2) and trying to build a generic that can alter certain properties of a given type.
type StrictNumber = {
doesNotChange: string,
nullable: false,
value: number,
};
type MakeNullable<T extends { nullable: false, value: unknown }> = {
[Property in keyof T]: Property extends 'nullable'
? true
: Property extends 'value'
? T[Property] | null
: T[Property]
};
type NullableNumber = MakeNullable<StrictNumber>;
This is the resulting NullableNumber
type:
type NullableNumber = {
doesNotChange: string,
nullable: true,
value: number | null,
};
The current implementation of the MakeNullable
generic works as intended, but it seems quite verbose and inelegant. As more properties need modification, it becomes even more cumbersome.