Microsoft/TypeScript
Auf GitHub ansehenError when initialising variable with generic parameter type
Open
#53.620 geöffnet am 1. Apr. 2023
BugDomain: Mapped TypesHelp Wanted
Repository-Metriken
- Stars
- (48.455 Stars)
- PR-Merge-Metriken
- (Durchschn. Merge 6T 17h) (9 gemergte PRs in 30 T)
Beschreibung
Bug Report
I am seeing an error when trying to initialise a variable with
const result: Partial<T> & { bar: boolean } = { bar: false };
where T is a type parameter in a generic function. The error is as follows:
4:9 - error TS2322: Type '{ bar: false; }' is not assignable to type 'Partial<T> & { bar: boolean; }'.
Type '{ bar: false; }' is not assignable to type 'Partial<T>'.
4 const result: Partial<T> & { bar: boolean } = { bar: false };
~~~~~~
If T is a type that is not a generic parameter then there are no issues, and also adding an additional step as follows leads to no errors:
const part: Partial<T> = {};
const result: Partial<T> & { bar: boolean } = { ...part, bar: false };
I have included a full code snippet below.
🔎 Search Terms
- "is not assignable partial"
- "intersection type generic function error"
🕗 Version & Regression Information
- This is the behaviour in every version I tried, and I reviewed the FAQ for entries about 'Common "Bugs" That Aren't Bugs'.
⏯ Playground Link
Playground link with relevant code
💻 Code
type PartialWithBar<T> = Partial<T> & { bar: boolean };
export const erroringFunc = <T extends Record<string, unknown>>(): PartialWithBar<T> => {
const result: PartialWithBar<T> = { bar: false };
return result;
};
export const workingFunc = <T extends Record<string, unknown>>(): PartialWithBar<T> => {
const part: Partial<T> = {};
const result: PartialWithBar<T> = { ...part, bar: false };
return result;
};
type MyType = { a: number };
export const workingFunc2 = (): PartialWithBar<MyType> => {
const result: PartialWithBar<MyType> = { bar: false };
return result;
};
🙁 Actual behavior
erroringFunc causes an error, while workingFunc does not.
🙂 Expected behavior
Either errorringFunc should not cause any errors, or workingFunc should cause an error - the two should be consistent.