-
Notifications
You must be signed in to change notification settings - Fork 12.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Union types aren't always narrowed properly after predicate functions #35299
Comments
Duplicate of #13962 |
This shows that the binding can be narrowed despite not being a union, as long as its narrowed with a switch statement: http://www.typescriptlang.org/play/?ssl=1&ssc=1&pln=27&pc=2#code/C4TwDgpgBAggxsAlgewHZQLxQN4CgpSiQBcUAhqiLgL665HTxJoyY76HgSkDkZPHMGRAAbZGQAmpABQBKTAD4oAN2SIJNOg1gIUqAEJs8BBrwBGAgkNHipUAM7AATolQBzTfS6wRIgPIArk5MevZsISxQAD46zAZ0EhBwImRO0ABmAai6aFCI9hGofqgQfumBTvbSZDmopIWypDVxeWEwvhWF9glJKWlQcGiODsgAthAA4ojKEKiF9bV0APRLUACS6YQAFvmthE4BEAA0UADu0ADWqMin29DNento0MibyEHdiJvS+YXFpeUPtJ7GNJtNZg15MYoCsBhQoGZoKhUk4bhAJAiQA5TohgHAthx7Di8VsoMDQVMZnNagA6BhQjgEOBkezQPg8Ugg8aUiG06xiSRyDi0ahAA type Action = {
type: any
}
type ActionA = {
type: 'a'
payload: () => void
}
type ActionB = {
type: 'b'
payload: string
}
type AllOurActions = ActionA | ActionB
declare function isActionOneOfOurs(action: Action): action is AllOurActions
declare const someGivenAction: Action
// If this is true, we know the action is one of ours
if (isActionOneOfOurs(someGivenAction)) {
// can be narrowed by switch
switch (someGivenAction.type) {
case 'a': someGivenAction.payload()
}
} |
Duplicate #30557 |
What makes the |
This issue has been marked as a 'Duplicate' and has seen no recent activity. It has been automatically closed for house-keeping purposes. |
TypeScript Version: 3.8.0-dev.20191122
Search Terms:
union types, narrowing, guarding
Code
Expected behavior:
Action type properly narrowed by the predicate function and an
if
statementActual behavior:
Action type not narrowed unless you rebind it prior to narrowing or a
switch
statement is usedPlayground Link:
http://www.typescriptlang.org/play/?ssl=1&ssc=1&pln=58&pc=2#code/PTAEEkFsEMHMEsB2BTUAnZATArgD1ABbIYB0oASlnulQMbEDOosyALqNLa-APaJMAzND0igAbtDS9sTAA4AbTsgZkAKkQCehaGNTRxcbKlYbZyAFAmzoAIJdeiUAF5QAb3OhQV5AC4OiDXMAX3NzEFAAeWw0DllZbSYAJg57PgZLU1Q7bj4bZzcPL0y-AHJoEsLZaA15HmhMPwAKAEpnAD5xHnhMYNDvW1TEACF8909vUoAjCs8qmrqG0AZWKURYXrCwdXgmfp2OUGxEB1AeAQ55eVPz5Eg1TW1dUEwd7kQuIrMGABpQAHcCPBaARQLRoI5NqBJqgZFgvDxnjtaFJIEhoKxjERIBlrDZLlE0NkHEwXETcqAAD4DHLDULhbaCI6DLzQADWyn8Wk4NN+4MwzzYxFRKCY8HO8HYBGgcWQ-HhkOhpxQ11O0RUEHODB4vwloEQkmEf12RBSNJKu0y5kwyFoigwoAETJpoB2ZMQERQEQEBIYjW5Dj8buafn9fBdTDx8gJbvSkIZ4cIPD+oA0PGwoLT8n5+rQhtVMVDjn6rAR+gYZloYqBppO3itNrtqFoaXYf2IyAAytFkHiMPUNIH8dEY3HAUxYNhJPyZJPLlo-jw0Kz0mLQI02xguxhe8h+yR+k5D6AyiVWmNQOEO0h6F4TQADbx30CyYRmNAmBMn35t0CsxBJ29UDmWp6gTfRHXeGlCnCBhr1QEpphrNJHj0JYViQWBn2qECek8DdO27Hc92AhYWg2cIAHVUFgHh2FYMckMcJB8xoHB6DQEhIXAdhm2wLMoVQIQRE5AF20aZASFgEgMBwfBrTEeEeHkJhFwOej4DQfkqnfLR5HgSZmnrW1JCbFslhEZAAHF4F0RA3UDQY6TAcBznU0VdjQIxv1QP8APovRmX2PhUDOfMV3ORpXUGD1kC9H1Gi1SArJs2UgzPaCwDBRxFRzQ04UmLQGD+CVgUKIqSpBBKLOs2y3X3TJ0s8TwwQYeDyj8RLktqwYSBI+oyM8EJPHCLKSlbCUQVoogYmWbABAEAB+QpVyqpKatSnqDyPE9GqayiCC0TAeGURAxtvfYFyXF1NWqlK7OZP5oCYXKAIKg4XywIF0QsJqLzACCetAQpPE69b7ppXrsNIwzBtCYawF1S7l2ulM0xoSYkH5CVCmbfhW0XZcXIATTTSgMcQTBuPyUG7rdZaIqRhhidJ5Bycp1h6usQ8XB2gpfv2w7joYU66IYpGUZp7rnUe56DVerlnxkr6MWBv6HSdBwyERgnRXOVN0xa9hsd+xnmewMnMe4yH5n6mHQBCIIgA
Related Issues:
Couldn't find anything directly related
The text was updated successfully, but these errors were encountered: