2.3 联合类型和类型保护
interface Waiter {
anjiao: boolean;
say: () => {};
}
interface Teacher {
anjiao: boolean;
skill: () => {};
}
function judgeWho(animal: Waiter | Teacher) {}
这时候问题来了,如果我直接写一个这样的方法,就会报错,因为judgeWho不能准确的判断联合类型具体的实例是什么。 这时候就需要再引出一个概念叫做类型保护
类型保护-in 语法
function judgeWhoTwo(animal: Waiter | Teacher) {
if ("skill" in animal) {
animal.skill();
} else {
animal.say();
}
}
类型保护-typeof 语法
function sum(a:number|string, b:number|string){
if(typeof a === 'string' && typeof b ==='string'){
return a + b
}
}
2.4Enum 枚举类型
enum Status {
MASSAGE = 1,
SPA,
DABAOJIAN,
}
默认从0开始递增,可以自己设置
2.5 TypeScript 函数泛型-难点
泛型的定义使用<>(尖角号)进行定义的
function sum<T>(a:T, b:T){
return `${a},${b}`
}
console.log(sum<number>(1, 2))
泛型中数组的使用
function myFun<ANY>(params: ANY[]) {
return params;
}
myFun(["123", "456"])
多个泛型的定义
function join<T, P>(first: T, second: P) {
return `${first}${second}`;
}
join(1, "2")
初始类的泛型
class seletdog<t>{
constructor(private dog:t[]){}
getdog(index:number){
return this.dog[index]
}
}
const seletdog1 = new seletdog(['1', '2', '3'])
console.log(seletdog1.getdog(2))
泛型约束
class SelectGirl<T extends number | string> {
//.....
}
泛型中的继承
interface dogname{
name:string
}
class seletdog<t extends dogname>{
constructor(private dog:t[]){}
getdog(index:number){
return this.dog[index].name
}
}
const seletdog1 = new seletdog([{name:'1'}, {name:'2'}, {name:'3'}])
console.log(seletdog1.getdog(2))
有一个约束条件,这个类型,必须要有一个name属性