类型别名
除了可以用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;