| ▲ | littlecranky67 5 hours ago | ||||||||||||||||||||||||||||||||||||||||
Typeguard is what you are looking for: function isDog(animal: Dog | Cat): animal is Dog { return "bark" in Dog } Then: isDog(animal) ? animal.bark() : animal.meow() You get full type narrowing inside conditionals using typeguards. | |||||||||||||||||||||||||||||||||||||||||
| ▲ | culi 4 hours ago | parent [-] | ||||||||||||||||||||||||||||||||||||||||
You don't even need that. The code exactly as presented acts as a discriminator. TypeScript is smart enough to handle that logic in the if block and know whether animal has been validated as Dog vs Cat. GP is complaining about a feature that already exists in TypeScript | |||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||