欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > typescript中的interface理解

typescript中的interface理解

2025/10/18 2:49:52 来源:https://blog.csdn.net/qq_43741689/article/details/144869424  浏览:    关键词:typescript中的interface理解

typescript中的interface理解

1.简单理解interface

interface是一种自定义的类型检测规范

可以通过定义interface来作为对象型参数的类型检测

比如定义一个User类型的检测规范

interface User{name:string,age:number,email?:string//?将email标记为可选属性
}

在使用User进行类型检测的时候

必须传入满足User的对象属性

//比如下面这个函数,返回值必须得符合User的规范
//说明返回的对象必须为{name:"",age:0}或者{name:"",age:0,email:""}这样的类型
function setUser(usename:string,age:number,email?:string):User{return { name: username, age, email}
}

输出

console.log(setUser("测试name",age:12))
//{ name: '测试name', age: 12, email: undefined }

2.interface的拓展

可以通过extends来在interface中加入其他interface的规范

interface A{nameA:string
}
interface B{nameB:string
}
interface C extends A,B{nameC:string
}

此时interface c extends a,b{ nameC:string }就相当于

interface C{nameA:string,nameB:string,nameC:string
}

使用C来进行检测时就得按照interface C 的规范

const obj:C = {nameA:"这是A",nameB:"这是B",nameC:"这是C"
}
console.log(obj)
//{ nameA: '这是A', nameB: '这是B', nameC: '这是C' }

3.接口的实现类

用类来实现interface的时候,使用关键字implements来实现

需要把interface作为类最小实现规范,也就是类至少必须要实现interface的内容

类在满足interface的情况下也可以加其他的内容

下面的IUser接口,实现类至少需要实现getName()getAge(),才满足接口的规范

interface IUser{getName():string,getAge():number
}

定义实现类AdminUser

class AdminUser implements IUser{  private name:stringprivate age:numberconstructor(adminName:string,adminAge:number){this.name=adminNamethis.age=adminAge}getName():string{//这个方法必须要有,且满足IUser的规范return this.name}getAge(): number {//这个方法必须要有,且满足IUser的规范return this.age}setName(newName:string):void{this.name = newName}
}

用类创建对象

const admin = new AdminUser("管理员A",12)
admin.setName("管理员newName")
console.log(admin.getName())
// 管理员newName

补充

1.多态:一个类可以实现多个接口,一个接口也可以拓展多个接口的规范

2.索引签名: 只规范接口中属性的类型,不规范属性的名字时候

interface testIndex {[key:string]: string; // 属性名为字符串,属性值也为字符串,但是不强制要求具体的属性名
}
const obj:testIndex={myKey:"这是我的Key"
}
console.log(obj)
// { myKey: '这是我的Key' }

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词