[microsoft/TypeScript] Type narrowing not working correctly with Uppercase<string> & Lowercase<string> (Issue #63724)
DRANK

wartab created an issue (microsoft/TypeScript#63724) ### 🔎 Search Terms "narrowing lowercase" "narrowing uppercase" ### 🕗 Version & Regression Information - This is the behavior in every version I tried, and I reviewed the FAQ for entries about Common Bugs and Type System Behavior ### ⏯ Playground Link https://www.typescriptlang.org/play/?#code/DYUwLgBAxg9grgOzAJwJ4GEYBMQC4IBEAQgKIEQA+hAMgKrlUEBy1BA3AFAewIDOkAB2QgAZgEsAHhAC8hAEYgCAOjAxaAgSGToAhrxAAKAJQQ9EdZuRQ9IADz9kYhAHMAfJw5iREA0NGSZaVliMkoqP3EpIOC6BnDhSMDglgITAG8OCCzoeCQ0TBwZCAjJTgB6MqyAPQ4KrIAVVE0IAHILLWt9exQnNxaIMV4IBBhIPV4xZwQdOVAIVXmmkFaQhhp6SkIUlqVayohG5paHXv7B4dHTXgmpmbmFsCWV0jWCWM3mVh2OAF8gA ### 💻 Code ```ts let countryCode: "BE" | "LU" | "NL"; const prefix = "be".toUpperCase() as Uppercase<string>; if (prefix === "BE" || prefix === "LU" || prefix === "NL") { countryCode = prefix; // ^ // Type 'Uppercase<string>' is not assignable to type '"BE" | "LU" | "NL"'. // Type 'string' is not assignable to type '"BE" | "LU" | "NL"'. } ``` ### 🙁 Actual behavior TypeScript cannot narrow down an `Uppercase<string>` or `Lowercase<string>` type after explicitly comparing against specific values. ### 🙂 Expected behavior TypeScript should accept the code above as `"BE" | "LU"` is strictly a sub-type of `Uppercase<string>`. ### Additional information about the issue _No response_ -- Reply to this email directly or view it on GitHub: https://github.com/microsoft/TypeScript/issues/63724 You are receiving this because you are subscribed to this thread. Message ID: <microsoft/TypeScript/issues/63724@github.com>

github.com
Related Topics: TypeScript
1 comments