microsoft / microsoft/TypeScript

TS Spec doesn't match implementation re method signature definitions

Aperta
#36,680 5 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Docs
Lingua principale
Go
Stelle
111k
Fork
14.3k
Merge medio
2g 4h
PR unite (30g)
132

Descrizione

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.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Apri doc/spec.md alla §3.9.5 e confronta la sua affermazione di equivalenza con l'eccezione di strictFunctionTypes descritta in PR 18654. Aggiorna la specifica in modo che la distinzione tra le dichiarazioni di metodo e le proprietà il cui valore è una funzione sia documentata accuratamente, quindi esamina gli esempi nell'issue per confermare che la formulazione corrisponda al loro comportamento.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
typescript
Ambito
compilers, documentation
Tipo di issue
Documentazione
Difficoltà
2/5
Tempo stimato
1-3 ore
Stato di attività
Ferma
Chiarezza
Specificata chiaramente
Idoneità per principianti
58/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.