ts的一些用法
1.交叉类型 & ---多个类型属性的集合
1.1类型别名实现
type Person ={name:string}
type Children = Person & {age:number}
let newPerson:Children = {// name:'hahah',name:'hhaah',age:18
}
1.2 接口类型实现
interface Inter1{name:string
}
interface Inter2{name:string;age:number;
}
type Inter3 = Inter1 & Inter2
*** 注意:如果交叉类型中 出现相同属性,但类型不同 ,例如name,Children中的name就会出string & number类型 ,但这种类型不存在,就会是报错说是never类型
2.联合类型 | --- 定义变量的类型可以为多种类型中的一种
let nameBasc: string | number
nameBasc = 'hahah'
3.字面量类型 --- 定义的变量只能是类型中的某个值
type Direction = 'name'|'age' | 'sex'
let string:Direction = 'name'
字面量类型 VS 联合类型
字面量类型,是来约束取值的,取值只能取定义的值增中的某一个,联合类型,是来约束类型的,取值可以为多种类型中的一种
4. 索引类型 keyof
let obj ={name:'zlz',age:18,sex:'男'
}
function getValues< T,K extends keyof T >(obj: T, keys:K[]): T[K][] {// console.log(33,keys,obj[keys[0]])return keys.map(key => obj[key])
}console.log(getValues(obj,['name']))
5.内置工具映射类型
interface Obj {name:string;age:number;
}
1.Partial ->可选类型
type obj1 = Partial<Obj>
2.Required ->必选
type obj2 = Required<Obj>
3.Readonly ->只读的
type obj3 = Readonly<Obj>
4.Pick ->摘取某项 K extends keyof T
type obj4 = Pick<Obj,'name'>
5.Record ->定义key,value 类型
type obj5 = Record<string,number>