microsoft / microsoft/TypeScript
TypeScript incorrectly says return is not assignable to an intersection containing all the required props
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 132
Description
Bug Report
🔎 Search Terms
& generic intersection omit spread
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about generics
⏯ Playground Link
Playground link with relevant code
💻 Code
export interface BaseProps {
id?: string;
name: string;
}
export type PropsWithId<P extends BaseProps> = Omit<
P,
'id'
> & { id: string };
export default function usePropsWithId<P extends BaseProps>(
props: P
): PropsWithId<P> {
const { id: idProp, name, ...other } = props;
const id = idProp ?? `${name}-id`;
return { id, name, ...other };
}
🙁 Actual behavior
The return line gets this TypeScript error:
Type '{ id: string; name: string; } & Omit<P, "id" | "name">' is not assignable to type 'PropsWithId<P>'.
Type '{ id: string; name: string; } & Omit<P, "id" | "name">' is not assignable to type 'Omit<P, "id">'.
This doesn't make sense since PropsWithId<P> is Omit<P, 'id'> & { id: string };
🙂 Expected behavior
This should work without a TypeScript error.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the linked TypeScript Playground and the generic intersection example in the issue, then trace how the checker evaluates the returned object against PropsWithId
. The issue names no repository files or tests; done means the sample compiles without the reported assignability error while preserving the expected PropsWithId
type.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 45/100