Microsoft/TypeScript

Bug: string is not a string

Open

#60.764 aberto em 14 de dez. de 2024

Ver no GitHub
 (4 comments) (0 reactions) (0 assignees)TypeScript (6.726 forks)batch import
BugDomain: Conditional TypesHelp Wanted

Métricas do repositório

Stars
 (48.455 stars)
Métricas de merge de PR
 (Mesclagem média 6d 17h) (9 fundiu PRs em 30d)

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.

Guia do colaborador