microsoft / microsoft/TypeScript

Object spread works for unconstrained generic

Abierto
#38,469 2 comentarios 12 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

In Discussion Suggestion
Lenguaje dominante
Go
Estrellas
111k
Forks
14.3k
Merge medio
1 d 19 h
PR fusionados (30 d)
117

Descripción

TypeScript Version: 3.8.3

Search Terms:
generic
spread
unrestrained
unrestricted

Expected behavior:
The spread function should not compile because T is not constrained to a type that can be spread.

Actual behavior:
It compiles.

Related Issues:
https://github.com/microsoft/TypeScript/issues/30129
https://github.com/microsoft/TypeScript/pull/13288

Code

function spread<T>(t: T) {
  // This should not compile
  return { ...t };
}

// The type of `result` is `number` even though the value of `result` is `{}`
const result = spread(5);

Output
"use strict";

function spread(t) {

    // This should not compile

    return Object.assign({}, t);

}

// Result is still a number when in reality it's {}

const result = spread(5);


Compiler Options
{
  "compilerOptions": {
    "noImplicitAny": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "strictPropertyInitialization": true,
    "strictBindCallApply": true,
    "noImplicitThis": true,
    "noImplicitReturns": true,
    "alwaysStrict": true,
    "esModuleInterop": true,
    "declaration": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "moduleResolution": 2,
    "target": "ES2017",
    "jsx": "React",
    "module": "ESNext"
  }
}

Playground Link: Provided

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

Reproduce el comportamiento del enlace de Playground proporcionado usando TypeScript 3.8.3 y las opciones del compilador indicadas. Lee el issue y el pull request relacionados; después, sigue el tratamiento que hace el compilador de object spread para un unconstrained generic. Se considera completado cuando el ejemplo se rechaza como se espera y el tipo resultante deja de ser incorrectamente el tipo del argumento.

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

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.