Can't Narrow Destructured Tuple Union · Issue #56973 · microsoft/TypeScript (original) (raw)
Navigation Menu
- GitHub Copilot Write better code with AI
- GitHub Models New Manage and compare prompts
- GitHub Advanced Security Find and fix vulnerabilities
- Actions Automate any workflow
- Codespaces Instant dev environments
- Issues Plan and track work
- Code Review Manage code changes
- Discussions Collaborate outside of code
- Code Search Find more, search less
- Explore
- Pricing
Provide feedback
Saved searches
Use saved searches to filter your results more quickly
Appearance settings
Description
🔎 Search Terms
Narrowing, Union, Destructuring, Tuple
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about unions, instanceof and tuples.
⏯ Playground Link
💻 Code
const VALUES = ["a1", "a2", "a3", "b1", "b2", "b3", "c1", "c2", "c3"] as const;
// Please ignore the non-sensical nature of these types. This is a simplified version of my real use case. type Value = (typeof VALUES)[number]; type TransformFunction = (values: Value[]) => Value[]; type TransformDefinition = [RegExp] | [TransformFunction];
// This doesn't work, but seems like it should. function errorExample(definition: TransformDefinition): TransformFunction { let [condition] = definition;
if (condition instanceof RegExp) { return () => VALUES.filter((value) => condition.test(value)); }
return condition; }
// This works, and is almost the same thing function successExample([condition]: TransformDefinition): TransformFunction { if (condition instanceof RegExp) { return () => VALUES.filter((value) => condition.test(value)); }
return condition; }
🙁 Actual behavior
In the first example function, I get this error:
Property 'test' does not exist on type 'RegExp | TransformFunction'.
Property 'test' does not exist on type 'TransformFunction'.
🙂 Expected behavior
Both examples should compile without an error
Additional information about the issue
My real use case is a bit more complex, and involves tuples with multiple values.