microsoft / microsoft/TypeScript

Partial of a mapped type from a union of enums fails when these enums have common members

Abierto
#41,700 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

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

Descripción

TypeScript Version: 4.0.5, 4.1.2, 4.2.0-dev.20201126

Works fine with TS 3.X

Search Terms: mapped type enum partial

Code

enum EnumA {
    A = 'A',
    B = 'B',
}

// A second enum with at least one key also in EnumA
enum EnumB {
    B = 'B',
    C = 'C',
}

type Mapped = {
    [k in EnumA|EnumB]: string;
};

const partial: Partial<Mapped> = {
    [EnumA.B]: 'value',
};

Expected behavior:
Should compile

Actual behavior:
Typescript complains that EnumA.B does not exist in Partial<Mapped> when declaring the partial variable:

Type '{ B: string; }' is not assignable to type 'Partial<Mapped>'.
  Object literal may only specify known properties, and '[EnumA.B]' does not exist in type 'Partial<Mapped>'.

Playground Link: https://www.typescriptlang.org/play?ts=4.2.0-dev.20201126#code/KYOwrgtgBAouEEEoG8BQUNSQXigcgTwBp1MAhKXPM41AX1VVElngrUygqppM4GFK+frQaoALgE8ADsCgBZAIbTZAEyEdMAbQDWUAJYhWkBAB84kMgF0AXFADO4gE6GA5gG56n1AGMA9iCOUADu+uIAFn5g4vx+EBABAGqKADZgwHYACopO4vqpADxKKsCqAHwapBhaFogAdAi2+LScNWx1-E14ot7+geJQ-vFJqekAYk5xCFk5eYXFahW4mtW1CHXWdt0kdL0BQUMJIMlpwBNxZDO5+SlFyouVrbVkG109jH1BoRFR4tnXqTsC1Kj20awaXXWhD4YPg602+HhLVhlleWxevCqUDaqM66I67yAA

Related Issues: maybe https://github.com/microsoft/TypeScript/issues/37859 ?

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 repro proporcionado para enum, mapped type y Partial; después, compara el comportamiento informado entre las versiones de TypeScript indicadas. Se considera terminado cuando el ejemplo compila como se espera al construir el mapped type a partir de la unión de enums, con cobertura de regresión para el caso de un miembro de enum compartido.

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
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.