source: https://www.typescripttutorial.net/typescript-tutorial/typescript-type-guards/