学习TypeScript 3(接口和对象类型)
对象的类型
在typescript中,我们定义对象的方式要用关键字interface(接口),我的理解是使用interface来定义一种约束,让数据的结构满足约束的格式。定义方式如下:
// 接口和对象 //对象 let obj = { name:"ZhangSan" } //接口 定义 interface A{ name:string } interface A{ age:number } // 接口的声明实现 // 重名的接口会被当做同一个接口 // let obj2:A ={} // 报错 let obj2:A = { name:"张三", //接口的对象要实现完整 age:18, }
//这样写是会报错的 因为我们在person定义了a,b但是对象里面缺少b属性 //使用接口约束的时候不能多一个属性也不能少一个属性 //必须与接口保持一致 interface Person { b:string, a:string } const person:Person = { a:"213" }//重名interface 可以合并 interface A{name:string} interface A{age:number} var x:A={name:'xx',age:20} //继承 interface A{ name:string } interface B extends A{ age:number } let obj:B = { age:18, name:"string" }
任意类型 [propName: string]:
格式:
[propName: string] + 属性需要注意的是,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集:
interface A{ age:number address?:string // 使用可选式操作符 使得该属性在对象中可选 [propName: string]:any //任意属性 // 需要注意的是,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集: // 例如 [propName: string]:string 后该接口的所有属性都必须是string类型 other?:string | number // 联合类型 | } // 接口的声明实现 // 重名的接口会被当做同一个接口 // let obj2:A ={} // 报错 let obj2:A = { name:"张三", //接口的对象要实现完整 age:18, // address:"可选式" //因为定义了任意属性,所以可以添加任意类型 money:100, abc:123 }
只读属性 readonly
readonly 只读属性是不允许被赋值的只能读取
//只读类型 readonly interface B{ readonly name:string age?:number [propName: string]:any } let BB:B = { name:"李四", age:19, } // BB.name = "王五" //报错
接口中添加函数
interface B{ readonly name:string age?:number [propName: string]:any cb():number //定义返回值为 number 的函数 db():void //定义没有返回值的函数 } let BB:B = { name:"李四", age:19, cb:():number => { return 123 }, db:() =>{} }
接口的继承
//接口的继承 interface B{ readonly name:string age?:number [propName: string]:any cb?():number //定义返回值为 number 的函数 db?():void //定义没有返回值的函数 } interface C extends B{ address:string } let CC:C = { name:"赵六", address:"继承", }接口继承使用
extends关键字,子接口中定义的属性不能改变父接口中相同名称的属性
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

