typescript中的interface理解

typescript中的interface理解

1.简单理解interface

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

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

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

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

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

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

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

输出

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

2.interface的拓展

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

typescript 复制代码
interface A{
  nameA:string
}
interface B{
  nameB:string
}
interface C extends A,B{
  nameC:string
}

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

typescript 复制代码
interface C{
  nameA:string,
  nameB:string,
  nameC:string
}

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

typescript 复制代码
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(),才满足接口的规范

typescript 复制代码
interface IUser{
  getName():string,
  getAge():number
}

定义实现类AdminUser

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

用类创建对象

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

补充

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

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

typescript 复制代码
interface testIndex {
  [key:string]: string; // 属性名为字符串,属性值也为字符串,但是不强制要求具体的属性名
}
const obj:testIndex={
  myKey:"这是我的Key"
}
console.log(obj)
// { myKey: '这是我的Key' }
相关推荐
KaMeidebaby2 小时前
卡梅德生物技术快报|蛋白 N 端测序在重组贻贝融合蛋白表征中的应用,解决原核表达序列偏移工艺难题
前端·人工智能·物联网·算法·百度
kyriewen4 小时前
我筛了 1400 个 Claude Code Skills,留下 5 个天天在用的
前端·ai编程·claude
JNX_SEMI4 小时前
AT2401C 2.4GHz 全集成射频前端单芯片技术解析
前端·单片机·嵌入式硬件·物联网·硬件工程
anOnion4 小时前
Agentic 前端开发之 实时显示 AI Agent 终端输出
前端·javascript·人工智能
随风一样自由4 小时前
【前端领域】2026最新前端领域全梳理(框架/工具/AI/跨端/底层标准/就业趋势)
前端·人工智能·前端框架
这是个栗子4 小时前
【前端性能优化】优化数据加载:用 Promise.all 从串行到并行
前端·javascript·性能优化·异步编程·前端优化·promise.all
fei_sun5 小时前
黑洞路由(Null Route/空接口路由)
服务器·前端·javascript
大爱一家盟5 小时前
告别卡点BGM同质化 2026原创卡点音乐素材下载网站 TOP5 推荐
大数据·前端·人工智能
彦为君5 小时前
算法思维与经典智力题
java·前端·redis·算法
aa小小6 小时前
localhost 访问异常排查笔记
前端