type定义
tyoe作用就是给类型起一个名字,支持基本类型,联合类型,元祖以及其它任何需要的手写类型,常用联合类型。
type test = number; // 基本类型
let num: test = 10;
type userObj = { name: string }; // 对象
type getUser = () => string; // 函数
type data = [number, string]; // 元组
type numOrFun = Second | getUser; // 联合类型
type 和 interface的区别
- 和接口一样,用来描述对象或者函数的类型
type User = {
name: string
age: number
}
type SerUser = (name: string, age: number) => void;
- 扩展和实现(extends & implement)
interface可以扩展,type可以通过交叉实现interface的extends行为
interface可以extends type,同时type也可以与interface类型交叉
interface Name {
name: string;
}
interface User extends Name {
age: number
}
let stu:User = {name: 'wang', age: 10}
//interface的扩展可以通过type交叉(&)类型实现
type Name = {
name: string;
}
type User = Name & {age: number}
let stu:User={name: 'wang', age: 18}
//interface 扩展 type
type Name = {
name: string;
}
interface User extends Name {
age: number;
}
let stu:User={name: 'wang', age: 89}
//type与interface交叉
interface Name {
name: string;
}
type User = Name & {
age: number;
}
let stu:User={name:'wang', age: 18}
映射类型
type能使用in关键字生成映射类型,但interface不行。
type Keys = "name" | "sex"
type DuKey = {
[Key in Keys]: string //类似 for ... in
}
let stu: Dukey = {
name: 'wang',
sex: 'man'
}