TS的核心原则之一就是对值所具有的结构进行类型检查。TS里面接口的作用就是为这些类型命名 和 为你的代码 或 第三方代码定义契约。
在面向对象语言中,接口(Interfaces)是一个很重要的概念,它是对行为的抽象,而具体如何行动需要由类(classes)去实现(implement)。
TypeScript 中的接口是一个非常灵活的概念,除了可用于对类的一部分行为进行抽象以外,也常用于对「对象的形状(Shape)」进行描述。
类型别名
type person={
name:string,
age:number
}
let person1:person;
person1={
name:"jack",
age:20
}
对象接口
- 只关注值的外形, 只要传入的对象满足提到的条件,那么它就是被允许的。
- 对象是无序的:类型检查器不会去检查属性的顺序,只要相应的属性存在且类型是对的就可以。
// interface中所有接口都必须实现并且满足其类型。
interface bird{
name:string,
age:number,
}
let b:bird;
b={
name:"bird1",
age:10
}
类型别名和对象接口的区别:
类型别名只是换了名字;但是对象接口是在创建一个对象需要我们去实现它
// 举例:
interface box{
color:string,
width:number,
height:number,
}
type box1=box;
let a:box1
// 此时的一不是box1类型的,box1只是它的一个别名;他还是box类型的
可选属性
接口里的属性不全都是必需的。 有些是只在某些条件下存在,或者根本不存在。 可选属性在应用“option bags”模式时很常用,即给函数传入的参数对象中只有部分属性赋值了。
// 如果想要可选使用,就要用====>"?"
interface bird2{
name:string,
age:number,
fly?:Boolean
}
let b2:bird2;
b2={
name:"bird1",
age:10,
fly:true//可以用,也可以不使用
}
带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面加一个?符号。好处:
- 可以对可能存在的属性进行预定义;
- 可以捕获引用了不存在的属性(往往是无意之中敲错的代码)时的错误;
只读属性
一些对象属性只能在对象刚刚创建的时候修改其值。 你可以在属性名前用 readonly来指定只读属性:
注:TypeScript具有ReadonlyArray<T>类型,它与Array<T>相似,只是把所有可变方法去掉了,因此可以确保数组创建后再也不能被修改。
readonly vs const:做为变量使用的话用 const,若做为属性则使用readonly。
// 只读属性
interface bird3{
name:string,
age:number,
fly?:Boolean,
readonly run:Boolean
}
let b3:bird3;
b3={
name:"jack",
age:15,
fly:false,
run:true //这个不报错是因为初始化
}
// b3.run=false;//报错.不能修改run的值,run是可读属性
// 想要修改只有重新指定一个对象
b3={
name:"karen",
age:1,
fly:false,
run:false //这个不报错是因为初始化
}