接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。
1、接口和对象类型
针对对象里的属性进行约束,定义接口类型必须和对象一致
interface objInter {
a:string,
b:number,
c:boolean,
}
如果obj里的值缺少任一个 会报错:类型“{}”缺少类型“objInter”中的以下属性: a, b, c
// let obj:objInter ={
// }
let obj:objInter = {
a: '1',
c: true,
b: 1
}
2、合并接口
interface A {
a:number
}
interface A {
b:string
}
let concat:A ={
a:1,
b:'1'
}
3、接口继承
interface B extends A {
c:Boolean
}
let extendObj:B ={
a:1,
b:'1',
c:true
}
4、可选属性(用?表示)
interface D {
a?:number,
b:string
}
// 使用可选符号时,定义的属性可以不写
let selectObj:D ={
b:'1'
}
5、任意属性 [propName:any]
interface arb {
a:number,
b:string,
[propName:string]:any //[中string]定义的是key类型 any定义的是value类型
//索引签名参数类型必须是 “string”、“number”、“symbol”或模板文本类型 [propName:这里不能是any]
}
let arbObj:arb ={
a:1,
b:'1',
str:'1',
}
6、只读属性 (只可读取,不可赋值)
interface readInter {
readonly a:number
b?:string
[propName:string]:any
fn():void
}
let readObj:readInter ={
a:1,
propStr:[1],
fn:function():void{
console.log('2')
}
}
// 不可对可选属性赋值
readObj.a = 2 //无法分配到 "a" ,因为它是只读属性
// 可对可选属性读取
readObj.a //1