microsoft / microsoft/TypeScript
Improve comparable relation of template literal types to detect more impossible situations
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.4k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
🔎 Search Terms
string condition always return false
2367 template
🕗 Version & Regression Information
This is the behavior in every version after 4.4.4 (including nightly), and I reviewed the FAQ for entries about "template" or "string"
This issue claims to fix a related problem in 4.5, but 4.5.5 is the first issue that fails for me. Maybe no relation though.
https://github.com/microsoft/TypeScript/issues/45201
In 4.4.4 it it fails correctly though, so maybe that fix is the regression of this issue?! https://www.typescriptlang.org/play?ts=4.4.4#code/C4TwDgpgBAglC8UAGBDAXGgJAbwHYFcBbAIwgCcBfJAKFEigCEFliMcCTyrrbxoANZkgAebPEVKUadaAE0h7CVxrUAxgHtcAZ2BR0sIeizYAjNw3bdrRkNbGzKizqiiogxCLEO1m5yDRQ8h443tQAlgBmUAAUwgjwiCAAlFDY1FBQTuoANhAAdNnqAObRAOTAABZhWlBaFer42QAmUBUoAG7QEShhuU2lSdQUPJExKPGIxClpGVm5BcVl3b01GmRkEKrA2SADQ9RAA
⏯ Playground Link
💻 Code
type A = `a::${number}`
type B = `b::${number}`
type X = `x::${number}`
type Y = `${number}`
const a: A = `a::${1}`
const b: B = `b::${1}`
const x: X = `x::${1}`
const y: Y = `${1}`
if (x === y) {
console.log('this should have failed')
}
if (a === b) {
console.log('fails correctly')
}
🙁 Actual behavior
Comparing x and y generates no complaints from TS for "x::1" and "1", but does for "a::1" and "b::1". There is no way for a number to evaluate to "x:: so there is no overlap between these template types.
🙂 Expected behavior
I would expect that Typescript shows that error consistently whenever types don't match.
There is no overlap between a string that must start with "x::" and one that must start with a number.
Additional information about the issue
No response
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, den Vergleich im verlinkten TypeScript Playground zu reproduzieren, und lies den zugehörigen Issue 45201 als Kontext. Verfolge, wie der Type Checker die Template-Literal-Typen vergleicht; abgeschlossen ist die Arbeit, wenn er die fehlende no-overlap-Diagnose für x und y meldet, ohne das bestehende Verhalten von a und b zu verschlechtern.
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