字面量类型 -- Typescript基础篇(8)

386 阅读1分钟

类型别名

除了可以用interface或者enum等定义不同的类型名字,还可以使用type为类型命名。

type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;
function getName(n: NameOrResolver): Name {
  if (typeof n === "string") {
    return n;
  } else {
    return n();
  }
}

类型别名和接口类型十分相似,类型别名可以实现接口的一切功能,但类型别名的继承和接口继承实现方式并不相同,类型别名通过交叉类型实现继承:

type Basis = {
  name: string;
};

type Advance = Basis & {
  age: number;
};

const advance: Advance = { name: "man", age: 18 };

在使用接口或者类型别名都能实现类型定义时,建议优先选择接口,其继承功能更为强大,语义化更好

字符串字面量

字符串字面量类型用来约束取值只能是某几个字符串中的一个,和枚举类型非常相似,写法十分简洁:

type Easing = "ease-in" | "ease-out" | "ease-in-out";
const easing: Easing = "ease-in";

数值字面量

数值字面量和字符串字面量十分相似,约束取值只能是某几个数值中的一个:

type ResponseCode = 200 | 204 | 400 | 401;
const code: ResponseCode = 200;