Microsoft/TypeScript

Bug: string is not a string

Open

#60 764 ouverte le 14 déc. 2024

Voir sur GitHub
 (4 commentaires) (0 réactions) (0 assignés)TypeScript (6 726 forks)batch import
BugDomain: Conditional TypesHelp Wanted

Métriques du dépôt

Stars
 (48 455 stars)
Métriques de merge PR
 (Merge moyen 6j 17h) (9 PRs mergées en 30 j)

Description

🔎 Search Terms

string extends template bug wrong error conditional

🕗 Version & Regression Information

  • This is the behavior in every version I tried, and I reviewed the FAQ.

⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.7.2#code/FAFwngDgpgBAcgexgXhgbQGYEMA2BnKAXWFElgEk8BBAZRACcBLAOwHMAeGgPhRhpigAPEFGYATPDAAGAEgDeLDFHowA+gF8pMAPwwGAV1gAuGNnxQA3CXDQ+DFq0q17bdgBUBw0RJh4XrHlQ0JzomV1k5N00uQk8RcUlEHVNcAhgTAygSAGMEZj9fAAsEfRwxKhwAdywwPAAhKDd6QxNQhxD-dgByPC7AvWbLIA

💻 Code

type No = [false]

type IsAString<S> = S extends `${infer _}` ? true : false;

type StringIsAString<T extends string> = [IsAString<`${T}`>] extends No ? false : true

const shouldAlwaysBeTrue: StringIsAString<'s'> = true;

🙁 Actual behavior

shouldAlwaysBeTrue reports the following error:

Type 'true' is not assignable to type 'false'.(2322)

🙂 Expected behavior

No error

Additional information about the issue

This is the most minimal reproduction of the issue I could come up with after whittling it down from a much more complicated scenario.

Interestingly enough, if I change almost anything about it, the issue goes away. For example, if I replace No with [false], issue goes away. If I take out one of the templates, issue goes away. Etc.

Guide contributeur