Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@bennycode
Created August 11, 2022 09:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bennycode/09b3d247d03e0651621ae69804dcb4c1 to your computer and use it in GitHub Desktop.
Save bennycode/09b3d247d03e0651621ae69804dcb4c1 to your computer and use it in GitHub Desktop.
Type Guard
type Dog = {
age: number;
name: string;
bark: () => void;
type: 'dog'
}
type Person = {
age: number;
name: string;
shout: () => void;
type: 'person'
}
function makeNoise(dogOrPerson: Dog | Person): void {
switch (dogOrPerson.type) {
case 'dog':
// Type is narrowed to "Dog", so we can "bark":
dogOrPerson.bark();
break;
case 'person':
// Type is narrowed to "Person", so we can "shout":
dogOrPerson.shout();
break;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment