Microsoft/TypeScript

Bug: string is not a string

Open

#60,764 建立於 2024年12月14日

在 GitHub 查看
 (4 留言) (0 反應) (0 負責人)TypeScript (6,726 fork)batch import
BugDomain: Conditional TypesHelp Wanted

倉庫指標

Star
 (48,455 star)
PR 合併指標
 (平均合併 6天 17小時) (30 天內合併 9 個 PR)

描述

🔎 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.

貢獻者指南