联合类型
联合类型(Union Types)表示取值可以为多种类型中的一种。
举个例子:
//服务员接口
interface Waiter {
canAnJiao: boolean;//是否会按脚
say: () => string;
}
//技师接口
interface Teacher {
canAnJiao: boolean;//是否会按脚
skill: () => string;
}
var person : Waiter | Teacher //person为;联合类型
类型守护
当遇到需要告诉编译器某个值是指定类型的场景时,我们可以使用:
类型断言
/**
* 判断一个人是服务员还是技师
* @param person
*/
function judge1(person: Waiter | Teacher) {
if (person.anjiao) {
(person as Waiter).say();
} else {
(person as Teacher).skill();
}
}
使用in
来进行类型断言
/**
* 判断一个人是服务员还是技师
* @param person
*/
function judge2(person: Waiter | Teacher) {
if ("skill" in person) {
person.skill();
} else {
person.say();
}
}
使用typeof
判断类型
function judge3(one: number | string, two: number | string) {
if (typeof one == "number" && typeof two == "number") {
return one + two;
} else {
return Number(one) + Number(two);
}
}
使用typeof
判断类型
class Person {
constructor(public uname: string) {}
}
function judge4(one: object | Person, two: object | Person) {
if (one instanceof Person && two instanceof Person) {
return one.uname + two.uname;
}
}