microsoft / microsoft/TypeScript

TS Spec doesn't match implementation re method signature definitions

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

Personne n'a encore pris cette issue.

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

Description

TS Spec § 3.9.5 says:

A method signature of the form

f < T1, T2, ... > ( p1, p2, ... ) : R

is equivalent to the property declaration

f : { < T1, T2, ... > ( p1, p2, ... ) : R }

But this is not the case with --strictFunctionTypes:

interface IFoo1 {
    bar(baz?: number): void
}
class Foo1 implements IFoo1 {
    bar: (baz: number) => void = (n) => void 0;
}

interface IFoo2 {
    bar: { (baz?: number): void }
}
class Foo2 implements IFoo2 {
    bar: (baz: number) => void = (n) => void 0; // err: Property 'bar' in type 'Foo2' is not assignable to the same property in base type 'IFoo2'.
}

I understand that the method bivarience in general is intentional as per the PR:

With this PR we introduce a --strictFunctionTypes mode in which function type parameter positions are checked contravariantly instead of bivariantly. The stricter checking applies to all function types, except those originating in method or construcor declarations

But it would be nice if the spec didn't state the syntaxes were equivalent when they aren't.

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

Ouvrez doc/spec.md à la §3.9.5 et comparez son affirmation d’équivalence avec l’exception de strictFunctionTypes décrite dans PR 18654. Mettez à jour la spécification afin que la distinction entre les déclarations de méthodes et les propriétés dont la valeur est une fonction soit documentée correctement, puis examinez les exemples de l’issue pour confirmer que la formulation correspond à leur comportement.

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

Évaluation

Stack technique
typescript
Domaine
compilers, documentation
Type d'issue
Documentation
Difficulté
2/5
Temps estimé
1-3 heures
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
58/100

Recevez les nouvelles issues par e-mail

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