Unknown and Never
 Unknown
 Unknown is one of those types that once it clicks, you
 can find quite a lot of uses for it. It acts like a sibling
 to the any type. Where any allows for ambiguity - unknown
 requires specifics.
 A good example would be in wrapping a JSON parser. JSON
 data can come in many different forms and the creator
 of the json parsing function won't know the shape of the
 data - the person calling that function should.
const jsonParser = (jsonString: string) => JSON.parse(jsonString);
const myAccount = jsonParser(`{ "name": "Dorothea" }`);
myAccount.name;
myAccount.email;
const jsonParserUnknown = (jsonString: string): unknown => JSON.parse(jsonString);
const myOtherAccount = jsonParserUnknown(`{ "name": "Samuel" }`);
myOtherAccount.name;
type User = { name: string };
const myUserAccount = jsonParserUnknown(`{ "name": "Samuel" }`) as User;
myUserAccount.name;
const neverReturns = () => {
  // If it throws on the first line
  throw new Error("Always throws, never returns");
};
const myValue = neverReturns();
const validateUser = (user: User) => {
  if (user) {
    return user.name !== "NaN";
  }
  // According to the type system, this code path can never
  // happen, which matches the return type of neverReturns.
  return neverReturns();
};
enum Flower {
  Rose,
  Rhododendron,
  Violet,
  Daisy,
}
const flowerLatinName = (flower: Flower) => {
  switch (flower) {
    case Flower.Rose:
      return "Rosa rubiginosa";
    case Flower.Rhododendron:
      return "Rhododendron ferrugineum";
    case Flower.Violet:
      return "Viola reichenbachiana";
    case Flower.Daisy:
      return "Bellis perennis";
    default:
      const _exhaustiveCheck: never = flower;
      return _exhaustiveCheck;
  }
};
type NeverIsRemoved = string | never | number;