microsoft / microsoft/TypeScript

Template decorators.

Ouverte
#36,448 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Needs Investigation
Langage dominant
Go
Étoiles
111k
Forks
14.3k
Merge moyen
2 j 4 h
PR mergées (30 j)
132

Description

TypeScript Version: 3.7.5

Search Terms: Decorators, Templates

I know decorators a experimental feature, so this issue is just to push it closer to production ready status.
Notice, I tried typescript version 3.8 beta in the playground.
For local check with tsc only two following flags are essential: "--experimentalDecorators --strict".

It seems like typescript cant pass complex props type. Instead of passing A | B, it just pass A. Using a more simple type A will not produce any errors.

Code

import { Component, ComponentClass } from "react"

const components = new Set<ComponentClass<any, any>>()

function dec<P, S>(component: ComponentClass<P, S>)
{
    components.add(component)
}

type Props = { x: number } & ( { y: number } | { z: number } )

@dec
class C extends Component<Props>
{
}

Expected behavior:
Everything works.

Actual behavior:
Following error:

Argument of type 'typeof C' is not assignable to parameter of type 'ComponentClass<{ x: number; } & { y: number; }, {}>'.
  Construct signature return types 'C' and 'Component<{ x: number; } & { y: number; }, {}, any>' are incompatible.
    The types of 'props' are incompatible between these types.
      Type '(Readonly<{ x: number; } & { y: number; }> & Readonly<{ children?: ReactNode; }>) | (Readonly<{ x: number; } & { z: number; }> & Readonly<{ children?: ReactNode; }>)' is not assignable to type 'Readonly<{ x: number; } & { y: number; }> & Readonly<{ children?: ReactNode; }>'.
        Type 'Readonly<{ x: number; } & { z: number; }> & Readonly<{ children?: ReactNode; }>' is not assignable to type 'Readonly<{ x: number; } & { y: number; }> & Readonly<{ children?: ReactNode; }>'.
          Property 'y' is missing in type 'Readonly<{ x: number; } & { z: number; }> & Readonly<{ children?: ReactNode; }>' but required in type 'Readonly<{ x: number; } & { y: number; }>'.(2345)

Playground Link:
http://www.typescriptlang.org/play/?experimentalDecorators=true&ts=3.8-Beta#code/JYWwDg9gTgLgBAbzgYQuCA7AphmAaFNSbXZAGwEMBnKuAXzgDMo04AiKLCgYxjYCh+3TFXjD0JGLQC8cbAHc4AZSwwAPKgk4Y5alTUUMATwKGjAPnMAKAJSDGAVwy9gmOABMs3NQAUCS63FibQAuQi1SShpff3M7BH44JLggzG0qADoKd3crVMk7OkEYIzAsOB8WMBlEOAAPMIwHEAAjLCh6OAAyOCtao0bmto6GAB9agC9B1vbOu34AAU9uISjaZDgsOpgcd3WiNNxfKqpzfgT+OiA

Related Issues:

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

Reproduire l’exemple fourni avec tsc en utilisant --experimentalDecorators et --strict, puis le comparer avec le TypeScript Playground lié en utilisant la 3.8 beta. Commencer par la vérification des types des décorateurs et le générique ComponentClass dans l’exemple. Le travail est terminé lorsqu’il est déterminé si le diagnostic 2345 signalé est incorrect pour le cas des props d’union et que le comportement attendu est validé.

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

Évaluation

Stack technique
react, typescript
Domaine
compilers
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

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