TypeScript 接口协议(interface)详细分析

  • interfacets 的含义:只声明成员方法,不做实现,定义了这个接口会有什么,但是没有告诉你具体是什么,可以用来约束一个函数,对象,以及类的结构和类型。

  • 类可以被多个接口协议约束,类也可以作为接口使用,也就是 implements 后面可以添加 单个或多个 接口与类,文章尾部有案例。

    格式:class 类名 implements 接口名, 接口名, 类名 ... {}

    例如:class Person implements Action, Info {}

  • 接口支持多继承。

    格式:interface 接口名 extends 接口名, 接口名, 类名 ... {}

    例如:interface Person extends Action, Info {}

  • 对象类型接口

    // 定义成员接口
    interface Member {
      // 成员ID
      id: number,
      // 成员名称
      name: string
    }
    
    // 定义团队接口
    interface Team {
      // 成员列表
      members: Member[]
    }
    
    // 发送团队用户 
    function sendData(team: Team) {
      team.members.forEach(item => {
        console.log(item.id, item.name)
      })
    }
    
    // 模拟数据
    let team = {
      members: [
        { id: 1, name: 'dzm' },
        { id: 2, name: 'xyq' }
      ]
    }
    
    // 发送数据
    sendData(team as Team)
    
  • 函数类型接口

    // 定义函数类型接口(两种方式)
    // 第一种
    interface Calc {
      (x:number, y:number):number
    }
    // 第二种
    // type Calc = (x:number, y:number) => number
    
    // 加法
    let add:Calc = (x, y) => { return x + y }
    // 减法
    let subtr:Calc = (x, y) => { return x - y }
    // 输出
    console.log(add(1, 2)) // 3
    console.log(subtr(4, 3)) // 1
    
  • 混合类型接口

    // 定义混合类型接口
    interface Mix {
      // 初始化构造方法
      (): void,
      // 消息
      msg: string,
      // 发送消息方法
      send(): void
    }
    
    // 初始化
    function initMix () {
      let mix:Mix = (() => {}) as Mix
      mix.msg = 'dzm'
      mix.send = () => {
        console.log(mix.msg)
      }
      return mix
    }
    
    // 使用
    let mix = initMix()
    mix.send() // dzm
    
  • 成员属性方法支持修饰符:【修饰符的详细使用】

    ?:可选修饰符,也就是可以实现可不实现。

    // 定义成员接口
    interface Member {
      // 成员ID(只读)
      readonly id: number,
      // 成员名称(必须有)
      name: string
      // 成员名称(?: 可有可无)
      age?: number
    }
    
  • 接口的实现(implements)与继承(extends)

    // 定义行动接口
    interface Action {
      // 跑起来
      run():void
    }
    
    // 定义信息接口
    interface Info {
      // 用户名称
      name: string
    }
    
    // 定义人接口,继承上面接口
    interface Person extends Action, Info {
      // 个人ID
      id: number
    }
    
    // 定义一个类,实现上面 Person 接口
    class Person1 implements Person {
      id: number
      name: string
      run(): void {
        console.log(`${this.name} 跑起来了`)
      }
    }
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡尔特斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值