make them narrow down to a single type using function maps?
Example:
type States = {
name: 'a',
someField: string
} | {
name: 'b',
otherField: boolean
}
const stateChange = (state: States) => {
const stateMap = {
a: () => state.someField,
b: () => state.otherField,
}
return stateMap[state.name]()
}
In the stateMap, TS doesn't know anymore that it was called with stateMap[state.name](). But with if and switch it works. I guess my fancy function maps do not work in this case. Otherwise I have to explicitly give the type for the function, maybe also not so bad.
Anyways, works perfectly with if and that is already great.
You should be able to cast it more strictly if you find yourself fighting TS inference
Makes sense. I just tried to put unions to a test after reading this article: https://blog.logrocket.com/put-the-typescript-enums-and-booleans-away/
https://www.typescriptlang.org/play?#code/C4TwDgpgBAysCGwIGcoF4oG8CwAoKBUAdvALYQBcUA5PNQDR6FTID25AYgJYQA2AJlWTAATlyIBzPAF8oAHyxNCJclWoAjBkoKtgACwgjufQVHWtWvCPCIy8eAMasiwlgiQBhPTYnQMACmFESlh3FABKdAA+RXxCJxdgN2CAWXgwdFjmZngqQLCqOGDUADIsYjIQ2mooaUi0GKCkADo2Th4BRjjsszymkKKkUvKVKs1a+saw5t0DIw7+LuZpbSgRCGAAVxEiZKQ0sABtfubRgF184Kh4VCIIADdDcIBuO1wgA
Обсуждают сегодня