interface
为我们的代码提供一种约定
TypeScript的核心原则之一是对值所具有的结构进行类型检查。它有时被称做“鸭式辨型法”或“结构性子类型化”
在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约
定义接口 函数型接口
interface my{
name:string
//可选属性+?号
age?:number
}
let man:my={name:'zt'};
function createS(config:my):void{
console.log(config.name)
}
设置接口只读属性 readonly
一些对象属性只能在对象刚刚创建的时候修改其值
用
readonly
还是const
的方法是看要把它做为变量使用还是做为一个属性。 做为变量使用的话用const
,若做为属性则使用readonly
。
interface Person{
readonly name:string;
readonly age:number;
}
//赋初始值
let man1:Person={name:'zt',age:8848};
man.age=20;//error!
任意属性
interface Person2{
name:string;
age:number;
sex?:string;
[propName:string]:any;
}
const man4:Person2={
name:"zt",
age:20,
test1:"lala",
test2:123,
}
函数类型接口
interface Person1{
(name:string,age:number):boolean
}
//定义Person1 约束 函数参数名可以不用和接口中的名字对应,只要求对应参数位置的类型兼容
let man2:Person1=(name:string,age:number)=>{
return age>888;
}
const man3=({name,age}:{name:string,age:number}):boolean=>{
return age>888
}
可索引类型的接口
用于描述某个类型可以通过索引进行读写,索引可以为数字也可以为字符串,常见的数组与对象就是索引类型
对数组、对象的约束
//可索引类型的接口
//对数组的约束
interface UserArr{
[index:number]:string
}
let arr7:UserArr=['aaa','111'];
//对对象的约束
interface UserObj{
[index:string]:string
}
let obj:UserObj={name:'张三',age:"20"}