microsoft / microsoft/TypeScript

Incorrect error on legitimate type overlap

Offen
#41,402 8 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

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

Beschreibung

TypeScript Version: 4.1.0-dev-20201102

Search Terms:

This condition will always return 'false' since the types 'X' and 'Y' have no overlap.

Code

function fn<T>(t: T) {
    return t === '' // error
}

fn('') // but here we pass it

https://www.typescriptlang.org/play?jsx=0#code/GYVwdgxgLglg9mABMMAeAKgPgBRQFyLoCUiA3gFCJWIBOAplCDUlIgLweIDkXiA9H0R0aNODXIBfcuRTYeJAYgDuYgNYBnIA

Expected behavior:

It works when we extend unknown. While this works on simple generics, it becomes inconvenient when the type parameter is nested deeper in a type structure.

function fn<T extends unknown>(t: T) {
    return t === '' // works
}

fn('') // works

https://www.typescriptlang.org/play?jsx=0#code/GYVwdgxgLglg9mABMMAeAKogpgDylsAEwGdFwBrMOAdzAD4AKKALkXQEpEBvAKEX8QAnLFBCCkURAF4ZiAORzEAeiWJqcQeWI8Avjx4oGCzirUatQA

Actual behavior:

This condition will always return 'false' since the types 'T' and 'string' have no overlap.

Related issues
https://github.com/microsoft/TypeScript/issues/27910

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 den generischen Vergleich im TypeScript-Compiler anhand des bereitgestellten Codes und der Playground-Links und vergleiche ihn anschließend mit dem Beispiel T extends unknown. Untersuche die Diagnose zur Typüberschneidung und das damit verbundene Issue #27910; als erledigt gilt die Aufgabe, wenn der legitime Vergleich nicht mehr meldet, dass er immer false zurückgeben wird, während ungültige Vergleiche weiterhin diagnostiziert werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
48/100

Neue Issues direkt in Ihr Postfach

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