当前位置: 首页 > news >正文

[Typescript]基础篇之接口

基础篇之接口

  • 什么是接口
  • 接口的定义
  • 接口的应用
    • 接口的使用
    • 接口中联合类型的使用
    • 接口中数组的使用
  • 接口继承
    • 单接口继承
      • 语法
      • 示例
    • 多接口继承
      • 语法
      • 示例

什么是接口

接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法

并且需要注意的地方是,接口只存在于 Typescript,javascript 中是不存在

接口是声明的一种,声明中存在一种通过别名定义的复杂声明,接口有些类似于复杂声明,但是接口是用于声明一系列相关的内容,并且具备一些特殊的功能,例如继承,所以复杂声明是无法替代复杂声明的

接口的定义

使用关键字:interface

interface interface_name {}

接口的应用

接口的使用

Typescript 中接口的使用:

interface IPerson {
  firstName: string;
  lastName: string;
  sayHi: () => string;
}

let customer: IPerson = {
  firstName: "Tom",
  lastName: "Hanks",
  sayHi: (): string => {
    return "Hi there";
  }
};

console.log("Customer 对象 ");
console.log(customer.firstName);
console.log(customer.lastName);
console.log(customer.sayHi());

let employee: IPerson = {
  firstName: "Jim",
  lastName: "Blakes",
  sayHi: (): string => {
    return "Hello!!!";
  }
};

console.log("Employee  对象 ");
console.log(employee.firstName);
console.log(employee.lastName);

因为接口只存在于 Typescript,所以编译后的 javascript 代码 是:

let customer = {
  firstName: "Tom",
  lastName: "Hanks",
  sayHi: function () {
    return "Hi there";
  }
};
console.log("Customer 对象 ");
console.log(customer.firstName);
console.log(customer.lastName);
console.log(customer.sayHi());
let employee = {
  firstName: "Jim",
  lastName: "Blakes",
  sayHi: function () {
    return "Hello!!!";
  }
};
console.log("Employee  对象 ");
console.log(employee.firstName);
console.log(employee.lastName);

接口中联合类型的使用

interface RunOptions {
  program: string;
  commandline: string[] | string | (() => string);
}

// commandline 是字符串
let options: RunOptions = { program: "test1", commandline: "Hello" };
console.log(options.commandline);

// commandline 是字符串数组
options = { program: "test1", commandline: ["Hello", "World"] };
console.log(options.commandline[0]);

// commandline 是一个函数表达式
options = {
  program: "test1",
  commandline: () => {
    return "**Hello World**";
  }
};

let fn: any = options.commandline;
console.log(fn());

接口中数组的使用

可以将数组的索引值和元素设置为不同类型,索引值可以是数字或字符串

interface namelist {
  [index: number]: string;
}

// 类型一致,正确
var list2: namelist = ["Google", "Runoob", "Taobao"];
// 错误元素 1 不是 string 类型,会报错
// var list2:namelist = ["Runoob",1,"Taobao"]

接口继承

接口继承是说接口可以通过其他接口来扩展自己。
Typescript 允许接口继承多个接口。
继承使用关键字 extends。

单接口继承

语法

单接口继承语法格式:

Child_interface_name extends super_interface_name

示例

typescript 代码示例:

interface Person {
  age: number;
}

interface Musician extends Person {
  instrument: string;
}

var drummer = <Musician>{};
drummer.age = 27;
drummer.instrument = "Drums";
console.log("年龄:  " + drummer.age);
console.log("喜欢的乐器:  " + drummer.instrument);

编译后的 javascript 代码:

var drummer = {};
drummer.age = 27;
drummer.instrument = "Drums";
console.log("年龄:  " + drummer.age);
console.log("喜欢的乐器:  " + drummer.instrument);

多接口继承

语法

多接口继承语法格式:

Child_interface_name extends super_interface1_name, super_interface2_name,,super_interfaceN_name

示例

typescript 代码示例:

interface IParent1 {
  v1: number;
}

interface IParent2 {
  v2: number;
}

interface Child extends IParent1, IParent2 {}
var Iobj: Child = { v1: 12, v2: 23 };
console.log("value 1: " + Iobj.v1 + " value 2: " + Iobj.v2);

编译后的 javascript 代码:

var Iobj = { v1: 12, v2: 23 };
console.log("value 1: " + Iobj.v1 + " value 2: " + Iobj.v2);

相关文章:

  • 现学现用的 10 个 Python 技巧
  • 3 UI开发的点点滴滴
  • 群晖docker实现IPV6访问
  • 攻防比赛中通过供应链进行渗透攻击
  • 实时即未来,车联网项目之电子围栏分析【六】
  • 前端应该掌握的浏览器调试技巧
  • Java的static关键字
  • Kafka原理介绍
  • 【Unity3D日常BUG】Unity3D中使用高亮插件Highlighting出现的错误:Parameter name:shader
  • LabVIEW编程语法学习笔记之全局变量
  • Redis高可用与持久化
  • 有关未来发展的考虑
  • 《安富莱嵌入式周报》第284期:Matlab2022b发布,支持从 .NET 调用,耳机放大器,牛屎芯片替换,JSON可视化,开源的飞行软件和嵌入式系统框架
  • Node.js 应用开发详解15 理论先行:高并发设计必须学的知识点有哪些?
  • 概率与信息论
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • canvas 绘制双线技巧
  • python 学习笔记 - Queue Pipes,进程间通讯
  • session共享问题解决方案
  • Theano - 导数
  • 彻底搞懂浏览器Event-loop
  • 机器学习学习笔记一
  • 近期前端发展计划
  • 聊聊redis的数据结构的应用
  • 前端技术周刊 2019-01-14:客户端存储
  • 日剧·日综资源集合(建议收藏)
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 第二十章:异步和文件I/O.(二十三)
  • 选择阿里云数据库HBase版十大理由
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $(function(){})与(function($){....})(jQuery)的区别
  • (1)bark-ml
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)创业的注意事项
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET 材料检测系统崩溃分析
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • @GlobalLock注解作用与原理解析
  • [ 第一章] JavaScript 简史
  • []T 还是 []*T, 这是一个问题
  • [ARM]ldr 和 adr 伪指令的区别
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue
  • [EULAR文摘] 脊柱放射学持续进展是否显著影响关节功能
  • [hive小技巧]同一份数据多种处理
  • [HXPCTF 2021]includer‘s revenge