microsoft / microsoft/TypeScript

TypeScript incorrectly says return is not assignable to an intersection containing all the required props

Abierto
#43,366 4 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Bug Domain: Intersection
Lenguaje dominante
Go
Estrellas
111k
Forks
14.3k
Merge medio
1 d 19 h
PR fusionados (30 d)
117

Descripción

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.

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con el TypeScript Playground enlazado y el ejemplo de intersección genérica del issue; después, sigue cómo el checker evalúa el objeto devuelto frente a PropsWithId

. El issue no menciona archivos ni pruebas del repositorio; se considera terminado cuando el ejemplo compila sin el error de asignabilidad informado y conserva el tipo PropsWithId

esperado.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
typescript
Área
compilers
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bien especificado
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.