microsoft / microsoft/TypeScript

No warning for a class implementing itself

Offen
#45,806 0 Kommentare 6 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Awaiting More Feedback Suggestion
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.4k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

Bug Report

🔎 Search Terms

[implements itself, self implements]

🕗 Version & Regression Information
  • This is the behavior in every version I tried from 3.3 on, and I reviewed the FAQ for entries about inheritance.
⏯ Playground Link

Playground link with relevant code

💻 Code
class Foo implements Foo {}
🙁 Actual behavior

This code passed typechecking.

🙂 Expected behavior

I expected the TypeScript compiler to emit an error on this code.

As far as I know, it's a no-op for a class to implement itself. The code author very likely intended to write something else.

This came up in the wild in TypeScript inside Google's repo. A file was trying to create a fake version of MediaSession with export class MediaSession implements MediaSession { for testing. The class accidentally implemented itself instead of the MediaSession interface from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/c6f1fc8c0b7c2ebe8e099586af618b0a33cfef65/types/wicg-mediasession/index.d.ts#L20.

Another example found via Google: https://stackoverflow.com/questions/54306190/what-does-it-mean-when-a-class-implements-itself-in-typescript

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Reproduziere das Problem aus dem verlinkten TypeScript Playground mit class Foo implements Foo {} und untersuche, wie der Compiler die implements-Klausel verarbeitet. Füge einen Regressionstest für den Fall der Selbstimplementierung hinzu und verifiziere, dass die Typprüfung einen Fehler ausgibt, während gültige implements-Klauseln weiterhin unverändert funktionieren.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.