microsoft / microsoft/TypeScript

keyof on generics arbitrarily returns `string` rather than the inferred values depending on the generic

Abierto
#44,121 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Bug Domain: Index Types
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

keyof generic string

🕗 Version & Regression Information
  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about it
⏯ Playground Link

Playground link with relevant code

💻 Code
export type Item = {
  args?: Record<string, string>;
};

export type BaseSpec = Record<string, {
  items: Item[];
}>;

export function genericFunction<Spec extends BaseSpec>(spec: Spec): keyof Spec {
  return {} as any;
}

const AAAAA: `someKey` = genericFunction({
  someKey: {
    items: [{
      args: {},
    }, {
      args: {
        name: `foo`,
      },
    }],
  },
});
🙁 Actual behavior
Type 'string' is not assignable to type '"someKey"'.
🙂 Expected behavior

No errors

💻 Additional Information

Weirdly, it seems to work if all args objects that are specified have exactly the same content. Removing an arg object seems to work, and it works as well if we add name: "foo" into the first arg object (or remove it from the second one).

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

Abre el TypeScript Playground enlazado y reproduce el error con genericFunction, BaseSpec y los objetos args diferentes. Investiga por qué keyof Spec se amplía a string en este caso de inferencia genérica y, después, verifica que el ejemplo pase la comprobación de tipos y que el resultado inferido sea "someKey".

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
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.