microsoft / microsoft/TypeScript

Object spread works for unconstrained generic

Ouverte
#38,469 2 commentaires 12 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

In Discussion Suggestion
Langage dominant
Go
Étoiles
111k
Forks
14.4k
Merge moyen
1 j 19 h
PR mergées (30 j)
117

Description

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

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Reproduisez le comportement dans le lien Playground fourni avec TypeScript 3.8.3 et les options du compilateur indiquées. Lisez l’issue et la pull request associées, puis suivez la gestion par le compilateur de object spread pour un unconstrained generic. Le travail est terminé lorsque l’exemple est rejeté comme prévu et que le type résultant ne reste plus incorrectement le type de l’argument.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
typescript
Domaine
compilers
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.