Typescript学习Day2(接口)

概念

//TypeScript的核心原则之一是对值所具有的结构进行类型检查
//它有时被称做‘鸭式辩型法’或‘结构性子类型化’。
//在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约

基本操作

//1,定义一个接口 
interface Person {
	pName : string,
	pAge : number,
	pJob : string
}
let person:Person = {  //接口的顺序是没有关系的,只会匹配接口的内容,只要属性存在,类型正确,那么即可编译通过
	pAge:22,
	pName:'nineone',
	pJob:'搞点夜点心778'
}

接口-可选属性 ?

interface Circle {
	color:string //颜色
	area:number //面积
}
interface CircleConfig{   // 添加 ‘?’ 来区分该属性是否可选
	color?:string
	radius?:number
}
function createCircle(config:CircleConfig):Circle{
	let newCircle = {color:'green',area:100}  //给圆的默认值
	if(config.color){  //如果有颜色
		newCircle = config.color
	}
	if(config.radius){  //如果有半径
		newCircle.area = Math.PI * config.radius * config.radius
	}
	return newCircle
}

let myCircle1 = createCircle(config:{radis:100})
let myCircle2 = createCircle(config:{color:'red'})

只读属性 readonly

interface FullName{  //readonly代表该属性只读
	readonly firstName : string
	readonly lastName : string
}
let p : FullName = {firstName:'杨',lastName:'楚青'}  
p.firstName = '李' //报错  只读属性赋值之后就不可修改

//数组 只读
let arr : number[] = [1,2,3,4]
let ra :ReadonlyArray<number> = arr
ra.push(2)  //报错 只读不可修改
ra[0] = 22  //报错 只读不可修改
ra.length = 100  //报错 只读不可修改

额外的属性检查
传入接口没有记录的属性

interface Circle {
	color:string //颜色
	area:number //面积
}
interface CircleConfig{   // 添加 ‘?’ 来区分该属性是否可选
	color?:string
	radius?:number
}
function createCircle(config:CircleConfig):Circle{
	let newCircle = {color:'green',area:100}  //给圆的默认值
	if(config.color){  //如果有颜色
		newCircle = config.color
	}
	if(config.radius){  //如果有半径
		newCircle.area = Math.PI * config.radius * config.radius
	}
	return newCircle
}
//1,使用类型断言  不推荐
let myCircle1 = createCircle(config:{radis:100,type:'red',num:99,flag:true} as CircleConfig)

//2,通过字符串的索引签名   [propsName:string]:any  推荐
interface CircleConfig{   // 添加 ‘?’ 来区分该属性是否可选
	color?:string
	radius?:number
	//字符串的索引签名
	[propsName:string]:any
}
let myCircle1 = createCircle(config:{radis:100,type:'red',num:99,flag:true})
//3,对象赋值 因为类型检查只会检查外部 并不会深入检查 所以这个方法可行 不会报错  不推荐
let obj = {radis:100,type:'red',num:99,flag:true}
let myCircle1 = createCircle(config:obj)

函数类型

interface CompareFunc{
	(first:number,last:number):boolean
}
let myCompare : CompareFunc = function (a,b){
	return a>b
}

可索引类型(了解)

interface StrArr {
	[index:number] : string
}
let myArr:StrArr = ['it','like']
let str:String =myArr[0]  //it

类类型

interface ClockInterface{
	currentTime:Date
	setTime(d:Date)
}
class Clock implements ClockInterface{
	currentTime:Date
	constructor(h:number,m:number){
		console.log(h,m)
	}
	setTime(d:Date){
		console.log(d)
	}
}

类静态部分 和 实例部分

//类具备两种类型
//1,静态部分的类型 不会去检查与约束
//2,实例类型

接口的继承

//一个接口 成员复制到另一个接口
//分割重用
interface Animal {
	//品种
	breed:string
}
interface Num {
	//数量
	num:number
}
interface Cat extends Animal,Num{  //通过extends关键字完成继承 , 继承多个接口用逗号隔开
	//颜色
	color:string
}
let cat = {} as Cat
cat.breed = '银渐层'
cat.color = '白色'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值