TypeScript学习-接口

文章详细介绍了TypeScript中的接口(Interface)概念,包括如何定义接口、使用可选属性、只读属性、可索引类型以及接口继承。通过示例展示了如何描述对象结构、函数类型以及在实际编程中的应用。同时,提到了额外属性检查确保对象的完整性和安全性。
摘要由CSDN通过智能技术生成
// TODO:接口
// 例子:打印obj.label
function printLabel(obj:{label:string}):void {
    console.log(obj.label);
}
let Obj = {size:1,label:'你好'}
printLabel(Obj)

// 【接口定义】重写上述例子,使用接口来描述一个包含label类型对象

interface labelValue {
    label:string
}
function printLabel1(params:labelValue) {
    console.log(params.label);
}
printLabel1(Obj)
// labelValue就好比一个名字,描述一个要求。代表有一个label属性且属性为string类型的对象

// 【接口的可选类型】
// 接口里的属性不一定都要是比传的,有些场景下某些条件存在或不存在。
interface Person{
    gender:string, 
    havePets?:boolean
}
// Person接口定义了一个人一定会有性别,但是否养了宠物这是不一定的
let xiaohong:Person = { //小红有宠物
    gender:"female",
    havePets:true 
}
let xiaowang:Person ={ //小王没有宠物
    gender:"man",
}

// 【只读属性】- readonly
// 定义了一个卡片接口,卡号比传,使用人可传并且为只读
interface Card{
    cardNumber:number,
    readonly userName?:string
}

// 合法赋值
let ID_Card:Card = {
    cardNumber:18355412511,
    userName:"小王"
}
// ID_Card.userName = "小黄" //报错,因为userName是只读属性

// 【衍生】数组只读属性
// 定义数组的时候可以定义一个只读数组,使用ReadonlyArray关键字

// 普通数组定义+赋值

let arr4:Array<number> = [1,2,3,4]
console.log(arr4,"普通数组");
arr4[0] = 10088
console.log(arr4,"下标0内容改变");

// 定义只读类型类型数组
let arr5:ReadonlyArray<number> = arr4
arr4[0] = 100123
// arr5[0] = 123 //报错:类型“readonly number[]”中的索引签名仅允许读取
console.log(arr4,":arr4");
console.log(arr5,":arr5");

// let arr6 = arr5 
// arr6[0] =123
// 只读类型数组赋值给一个未定义的新变量,依旧是只读的不可以修改值

let arr6:number[]
// arr6 = arr5  
// 这样赋值是不会报错的 类型 "readonly number[]" 为 "readonly",不能分配给可变类型 "number[]"
arr6 = arr5 as number[] //可以使用类型断言欺骗一下
// 作为变量使用的话用const,做为属性使用用readonly


// 【额外的属性检查】

// 现在有这样一个function,创建一个圆形
interface SquareConfig{
    color?:string,
    width?:number
}

function createSquare(config:SquareConfig){
    let newSquare = {color:"red",area:100}
    if(config.color){
        newSquare.color = config.color
    }
    if (config.width) {
        newSquare.area = config.width *config.width
    }
    return newSquare
}
let value:SquareConfig ={
    'color':'pink'
}
// 创建一个粉色的正方形
console.log(createSquare(value));

// 这时我背景色需要是蓝色的
// value.background = "blue" // 报错 :类型“SquareConfig”上不存在属性“background”。

// 所以在描述这个接口的时候需要加一个额外属性检查写法如下
interface createSquare1{
    color?:string,
    width?:number,
    [propName:string]:any //额外属性检查
}


// 【函数类型描述】
interface Func{
    (source:string,substring:string):boolean
}
let search:Func
search = (src:string,sub:string):boolean=>{  //对于函数检查类型来说,参数名不需要和接口里定义的相匹配
    return src.search(sub)>-1
}


// 【可索引类型】
interface stringArray {
    readonly [index:number]:string //索引签名
}
let arrStr:stringArray = ['xx','hh']
console.log(arrStr[0]);

// 接口继承
interface Food{
    size:string
}
interface apple extends Food{
    color:string
}
let apple:apple = {
    color:'red',
    size:'middle'
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值