Can't Narrow Destructured Tuple Union · Issue #56973 · microsoft/TypeScript (original) (raw)

Skip to content

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

Appearance settings

@LandonSchropp

Description

@LandonSchropp

🔎 Search Terms

Narrowing, Union, Destructuring, Tuple

🕗 Version & Regression Information

https://www.typescriptlang.org/play?ts=5.0.4#code/MYewdgzgLgBAagQQDIFUCiBlGBeGBtAIgEMBGAgGhmICYKqiBmOggIzMtdo5aY+HarAugpgF0YRCDFCQoAbgBQCgPTKYABQA2AU0naYASwDmYEACd9UABb7TYALQRtkA8CKaYYIlACuFmCAAZjDW2k4hAJ4ADmEAdDAAKlYGUikSMBAGALZRmgaBBtoAJjAAbtpmmeABwVkRMBbuMD7hbk6xClDR+nDuPvq4ABRdMUHwyOgYAJR4YD5ZLBWiiiP6CWZEkIHmWQBiPmDAUAbVQ6V9YQBc8Bd4olM4AHw3mv13K92JG1s7ACLaBTABmOp3wACVtEY0AAPKLiAA++HWmwg2zMewORxOYGWSlUiWSUiKIDCYAA5LAAO7mADWlBYPlgTm0WSkeRp+mBGSsIB8miKHUCmJBYBgFTM5hhRByOkGRQBBiBIuuyJ+6P+gOB2KmKu+qJ2+0OIpgAG8FDAYDpYHgZEUteBxLh5ZqRYpzYZgoNbfbRYroJtgNoxhCobCHmaLRaLL4zKLBg9sM9EKhMLECpooBVBoNzq9tAnnt6RbFM9AcxcplNFBaAL5KKPaGOiovYxR1lRqJJpalmGkQSibEppdxZEDQEI2DLSyzJMBGBRCo3YjI+YCBiAQKUy7SDG3gO0i0S6lForIaxU+nVfE8G4XLiMemBe-c+wyyANB4IhmFRcPuhtNk+BbjCmGBpgYGZZuWebAS24AlmEUDQf0lbVjA7YAX4zYvq6Cg1kAA

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