联合类型

联合类型的常用场景之一是通过多个对象类型的联合,来实现互斥属性,也就是说如果它有某个属性,那么就有另一个属性。

interface Tmp {
  user:
    | {
        vip: true;
        expires: string;
      }
    | {
        vip: false;
        promotion: string;
      };
}

// declare let 表示这个对象具有这一种类型,但是不需要给它指定具体的值
declare let tmp: Tmp;

if (tmp.user.vip) {
  console.log(tmp.user.expires);
}