TypeScript 接口 、类型别名

1、接口

接口类型是一种自定义类型,可以让我们自定义出一种数据类型的格式,之后在声明这种类型时值的格式都必须按照接口说描述好的来定义。

声明一个接口是首字母应该大写。

另外接口内部以分号分隔。

下面这个 MyInt 接口就是给对象用的,用来让对象统一类型和格式

interface MyInt {
    name:string;
    age:number;
    gender:number
}

let obj1:MyInt = { name:"zhangsan" , age:18 , gender:1 }

// let obj2:MyInt = { work:"" , name:"zhangsan" , age:18 , gender:1 } // 报错 因为该类型没有work字段

// let obj3:MyInt = { name:"zhangsan" , age:18 , gender:"1" } // 报错 因为gender字段在接口中是number类型

 数组接口类型,该类型规定数组的每一项都是number和string类型,否则报错。

这里 [id:number] 代表的是下标的类型 后面代表的是值类型

interface MyArr {
     // 这种形式同时还能代表键值对 ( name:"zhangsan" ),因此可以用来当作对象的格式也可以
    [id:number]:number|string
}

let arr1:MyArr = [ '1' , '2' , 3 , 4 , 5 ]

函数接口类型 规定函数的类型格式。

(p:string|number) 代表函数传入的参数的类型,

void 代表返回值的类型为空,可以不返回值 

interface MyFoo {
    (p:string|number) : void
}

let foo1:MyFoo = ()=>{

}
// foo1(true) // 报错 因为规定了参数的类型必须为string和number
foo1(11);
foo1("aa");

接口的合并 继承 以及只读 和缺省。

readonly 声明的字段代表该字段是只读,不可在改。

属性名? 这种方式声明的字段代表该字段不是必须的字段,可以不写。

interface Ainter {
    readonly name:string;
}

interface Binter {
    age?:number;
    gender:string;
}

// extends 代表继承 继承了其他接口后,在使用时就必须将所继承接口的格式也全部定义好
interface Cinter extends Ainter , Binter {
    height:number;
}

let obj2:Cinter = {
    name:"zs",
    height:1.80,
    gender:"nan"
};

// obj2.name = "lisi" //报错 只读属性不可修改

 当两个接口同名时,它们就会自动合并在一起,因此在使用必须都写上。

interface ABinter {
    name:string
}

interface ABinter {
    age:number
}

let obj3:ABinter = { name:"zs" , age:18 }
// let obj4:ABinter = { name:"zs" }; //报错 因为没有age

2、类型别名

用type关键字可以声明类型别名,这个类型别名和接口其实有点类似,都是可以用来自定义一个类型。 

type StrOrNum = number|string;

let aa:StrOrNum = 'aaa';
aa = 123

 用类型别名来声明一个函数的类型格式

type Fn = (p:string) => void

let foo1:Fn = (p)=>{ };

foo1("aa")

 类型别名可以和接口混合在一起使用。

interface Ainter {
    gender:number;
}

type num = Ainter['gender'];

let bb:num = 123;

Ainter['gender'] 代表 取 Ainter接口中的 gender 的类型

promise的用法

interface Arrintf {
    // 这种形式同时还能代表键值对 ( name:"zhangsan" ),因此可以用来当作对象的格式也可以
    [key:string]:number|string
}

interface PromIntf {
    code:number;
    msg:string,
    data:Arrintf[]
}

let pro:Promise< PromIntf > = new Promise((resolve , reject)=>{
    resolve({
        code:200,
        msg:"66666",
        data:[ { name:"zs" } , { name:"lisi" } ]
    })
})

pro.then(res=>{
    console.log(res.code , res.msg)
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值