π Search Terms
"type hints union undefined"
π Version & Regression Information
- This changed between versions 5.4.5 and 5.5.4
β― Playground Link
https://www.typescriptlang.org/play/?target=7&ts=5.5.4&ssl=10&ssc=1&pln=11&pc=1#code/C4TwDgpgBAShCOBXAlgJwgEwNIRAZwB4AVKCAD2AgDsM8oB7AIwCsIBjYAPigF4oBvAFBQRUANpYoyKlADWuegDNYCFOgzFOAXQBcUIhK0BuQQF8Tg0JCgAxevV4DBASACGAfj15gqaQHMTZ0ZPKCpEAFtGCFRAti8ff0CMPUZ7ABsIVxkAHyhEGghFaUwTU0FBAHoAKkEAUTJIDkwoKwg9S3BoACFXVEchUShXeN8qPyhc-IxC4owjKAICHj4pmapm5Dpwzbx-KRkAN2jd+hlOPgBWADprgBYoAApTtJB9loALaFaod+lgOmA6WAyDAAEphKJGHowpFohM8gUius5gslitEbMpFsdntpFAjqgTmdLjcrvcnlQXm9gJ8Wp0fn8AUCQeDBnEoN5RgEISJklBUvQMll4askSUzIIqhUOtYen0+HAkGhMDh8AQ7PROBYKhUoABhADyMBgtT1RGhDmiqHoqAANFAihA0hghkMaPyhugGGBgadXGlBGxTt4HfY9Br+jyoOyAOSMLIJmO2qN8nyICASyq6w3G03m0KW1DWu0O5BOl2uN0uxie6DoJXqfmIYAI6Zil2bIZpNL0ADumEDwZb8dQejlkcGw1ba0wycGUOn7bnolj8aoieXvL0aYzZSz+qNJrNeitNvtjudrqy1drUHragHQaoIZHACYx70Jyu9HGE+ukym26oOmEpAA
π» Code
type RequiredKeys<T extends object> = {
[K in keyof Required<T>]: T[K];
};
type Foo = {
a?: string;
b?: number;
c: string;
d: boolean | undefined;
}
/*
Expected type:
type Bar = {
a: string | undefined; <<== undefined is missing in version >= 5.5.4 (only in the type hints tooltip)
b: number | undefined; <<== undefined is missing in version >= 5.5.4 (only in the type hints tooltip)
c: string;
d: boolean | undefined;
}
*/
type Bar = RequiredKeys<Foo>;
// CORRECT: no error, field a and b are optional
const foo: Foo = {
c: 'banana',
d: true
}
// CORRECT: no error, field a and b are required but undefined is allowed
const bar: Bar = {
a: undefined,
b: undefined,
c: 'banana',
d: true
}
// CORRECT: error, field a and b are required
const bar2: Bar = {
c: 'banana',
d: true
}
π Actual behavior
The purpose of RequiredKeys is to make all optional fields required, but leave the union with undefined intact.
The actual behavior is that it also removes the union with undefined, but only in the type hint tooltip, the compiler and type instances do work.
This issue started from version 5.5.4 and up.
This is the incorrect type in the type hint tooltip, fields a and b should have a union with undefined:
type Bar = {
a: string;
b: number;
c: string;
d: boolean | undefined;
}
π Expected behavior
It's expected that the type hint tooltip shows the union with undefined for fields a and b.
This is the correct type in the type hint tooltip, fields a and b have a union with undefined:
type Bar = {
a: string | undefined;
b: number | undefined;
c: string;
d: boolean | undefined;
}
Additional information about the issue
Toggle between versions 5.4.5 and 5.5.4 in the playground and hover over the Bar type to see the difference.
π Search Terms
"type hints union undefined"
π Version & Regression Information
β― Playground Link
https://www.typescriptlang.org/play/?target=7&ts=5.5.4&ssl=10&ssc=1&pln=11&pc=1#code/C4TwDgpgBAShCOBXAlgJwgEwNIRAZwB4AVKCAD2AgDsM8oB7AIwCsIBjYAPigF4oBvAFBQRUANpYoyKlADWuegDNYCFOgzFOAXQBcUIhK0BuQQF8Tg0JCgAxevV4DBASACGAfj15gqaQHMTZ0ZPKCpEAFtGCFRAti8ff0CMPUZ7ABsIVxkAHyhEGghFaUwTU0FBAHoAKkEAUTJIDkwoKwg9S3BoACFXVEchUShXeN8qPyhc-IxC4owjKAICHj4pmapm5Dpwzbx-KRkAN2jd+hlOPgBWADprgBYoAApTtJB9loALaFaod+lgOmA6WAyDAAEphKJGHowpFohM8gUius5gslitEbMpFsdntpFAjqgTmdLjcrvcnlQXm9gJ8Wp0fn8AUCQeDBnEoN5RgEISJklBUvQMll4askSUzIIqhUOtYen0+HAkGhMDh8AQ7PROBYKhUoABhADyMBgtT1RGhDmiqHoqAANFAihA0hghkMaPyhugGGBgadXGlBGxTt4HfY9Br+jyoOyAOSMLIJmO2qN8nyICASyq6w3G03m0KW1DWu0O5BOl2uN0uxie6DoJXqfmIYAI6Zil2bIZpNL0ADumEDwZb8dQejlkcGw1ba0wycGUOn7bnolj8aoieXvL0aYzZSz+qNJrNeitNvtjudrqy1drUHragHQaoIZHACYx70Jyu9HGE+ukym26oOmEpAA
π» Code
π Actual behavior
The purpose of RequiredKeys is to make all optional fields required, but leave the union with undefined intact.
The actual behavior is that it also removes the union with undefined, but only in the type hint tooltip, the compiler and type instances do work.
This issue started from version 5.5.4 and up.
This is the incorrect type in the type hint tooltip, fields a and b should have a union with undefined:
π Expected behavior
It's expected that the type hint tooltip shows the union with undefined for fields a and b.
This is the correct type in the type hint tooltip, fields a and b have a union with undefined:
Additional information about the issue
Toggle between versions 5.4.5 and 5.5.4 in the playground and hover over the Bar type to see the difference.