被迫开始学习Typescript —— interface

一开始以为,需要使用 class 来定义呢,学习之后才发现,一般都是使用 interface 来定义的。

这个嘛,倒是挺适合 js 环境的。

我们先来定义一个简单的接口

interface Person {
  name: string,
  age: number
}

用接口定义一个对象

const jim: Person = {
  name: 'jyk',
  age: 18
}

这样编辑器就可以按照接口的定义来检查 jim 是否符合要求。

如果是多层的属性怎么办呢?我们可以一起定义,也可以分开定义。

  • 在一起定义(比较直观):
interface Person {
  name: string,
  age: number,
  role: {
    api: string,
    moduleId: number
  }
}
  • 分开定义(可以灵活组合):
interface Role {
  api: string,
  moduleId: number
}

interface Person {
  name: string,
  age: number,
  role: Role
}

如果有多个 role 呢,我们可以用数组的形式,也可以用索引的方式。

  • 数组的方式
interface Person {
  name: string,
  age: number,
  roles: Array
}
  • 索引的方式
interface Person {
  name: string,
  age: number,
  roles: {
    [index: number | string ]: Role
  }
}

js 可以很随意,没想到 ts 也可以比较随意。

interface SquareConfig {
    color: string;
    width: number;
    [propName: string]: any;
}

除了指定的属性之外,还可以有其他任意属性。这个嘛。

interface SearchFunc {
  (source: string, subString: string): boolean;
}

定义参数和返回类型。

这个嘛,说起来挺奇怪的,虽然是一个我想要的的方式,但是发现真的有这种方式的时候,还是感觉挺诧异的。

interface StateOption {
  isLocal?: boolean,
  isLog?: boolean,
  level?: number
}

interface StateCreateOption {
  state?: any,
  getters?: any,
  actions?: any
}

const foo: StateCreateOption & StateOption = {
  isLocal: true,
  state: {},
}

可以把两个接口合并在一起,约束一个对象,要求有两个接口的属性。

贯彻了 js 世界里的 “组合>继承” 的特点。

接口除了合并之外,还可以继承接口,支持多继承。

interface Customer extends Person, 其他接口 {
  phone: string
}

ts 的 class 也可以继承(实现)接口,也支持多继承。

class Customer extends Person, 其他接口 {
  phone: string
}

接口还可以继承类?我也没想到可以这样。

class Control {
    private state: any;
}

interface SelectableControl extends Control {
    select(): void;
}

class Button extends Control implements SelectableControl {
    select() { }
}

class TextBox extends Control {

}

// Error: Property 'state' is missing in type 'Image'.

class Image implements SelectableControl {
    select() { }
}

class Location {

}

是不是挺绕的?好吧,我也没绕出来。

  • 继承 class 使用 extends。
  • 继承 interface 使用 implements。
  • 既有约束,也有一定的灵活性。

Original: https://www.cnblogs.com/jyk/p/16269238.html
Author: 金色海洋(jyk)
Title: 被迫开始学习Typescript —— interface

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/549190/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Excel相关

    Excel拼接双引号,单引号和逗号 假如有两个单元格,a2,b2。他们的内容分别是 你好 和 世界 现在我需要用一个公式在c2中显示 “你好,世界’ 方法如…

    技术杂谈 2023年5月30日
    091
  • SpringBoot-shiro

    SpringBoot-shiro 12.1 快速入门 1、导入依赖 org.apache.shiro shiro-core 1.8.0 org.slf4j jcl-over-slf…

    技术杂谈 2023年6月21日
    094
  • go源码解读

    https://www.cnblogs.com/ricklz/category/1217225.html?page=1 Original: https://www.cnblogs….

    技术杂谈 2023年5月30日
    088
  • JSON数据传输大法第一式——用OADate处理日期格式

    JSON作为一种轻量级的数据交换格式,通常采用完全独立于编程语言的文本格式来存储和表示数据。它的层次结构简洁清晰,易于人们的阅读和编写,此外机器编写和生成也会变得容易,可以有效地提…

    技术杂谈 2023年5月30日
    0123
  • UML3

    posted on2022-06-13 17:36 莫水千流 阅读(20 ) 评论() 编辑 Original: https://www.cnblogs.com/zhoug2020…

    技术杂谈 2023年6月1日
    092
  • JAVA多线程实战

    由于项目上要和其他系统交互,而该系统采用同步接口,我们采用单线程调用,接收一条数据平均需要4~6s。而我们需要汇总近三个月的订单信息,大约一次有几千条数据,所以进行一次交互大概需要…

    技术杂谈 2023年7月24日
    090
  • 大数据各组件重要技术点总结

    针对大数据组件特点归纳如下: 存储:HDFS,hudi,Hbase, Kafka 计算引擎:Spark,Flink OLAP: Doris 调度: Yarn 下面主要从架构、组件原…

    技术杂谈 2023年7月11日
    062
  • pidstat命令详解

    pidstat命令详解 pidstat 命令是 sysstat 工具的一个命令,用来监控全部或者指定 进程的CPU、内存、线程、设备IO等系统资源的占用情况。 pidstat 首次…

    技术杂谈 2023年5月31日
    0114
  • 73.纪念

    dsfsd posted @2022-09-28 08:48 随遇而安== 阅读(26 ) 评论() 编辑 Original: https://www.cnblogs.com/55…

    技术杂谈 2023年6月21日
    094
  • 使用Spring AOP实现系统操作日志记录

    Aspect: 切面,在Spring中使用@Aspect注解标识,该类封装一些具体的操作,例如记录日志。 Joinpoint: 连接点,是指的是在程序运行过程中的某个阶段。 Poi…

    技术杂谈 2023年6月21日
    097
  • Python中的print()语句

    Python中print()语句的相关使用 介绍 print()函数可以将输出的信息打印出来,即发送给标准输出流。Python中可以直接使用print()函数,将信息展示在控制台 …

    技术杂谈 2023年7月24日
    0105
  • LeetCode28.实现strStr()

    实现strStr()函数。 给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串出现的第一个位置(下标从0开始)。如果不存在,则返回-…

    技术杂谈 2023年7月24日
    065
  • nginx源码层面探究request_time、upstream_response_time、upstream_connect_time与upstream_header_time指标具体含义与区别

    背景概述 最近计划着重分析一下线上各api的HTTP响应耗时情况,检查是否有接口平均耗时、99分位耗时等相关指标过大的情况,了解到nginx统计请求耗时有四个指标:request_…

    技术杂谈 2023年6月21日
    0101
  • 新人公司选择及进入公司后注意事项

    公司/平台选择 优先选择走在未来航道上的那些 快速发展的公司 确认所选公司是否是一家 以技术驱动,以技术文化为主导的公司 新人进入公司后要注意 一般的开发流程是:需求分析➡️设计➡…

    技术杂谈 2023年7月25日
    086
  • N68第二周作业

    完成作业:完成一个shell脚本,脚本的作用。1. 运行脚本可以显示出本机的ip地址2. 如果ip地址中有3这个数字,那么就打印出当前的系统时间3. 如果ip地址中不含3这个数字,…

    技术杂谈 2023年6月21日
    086
  • 注意力机制的一些变体

    1. 硬性注意力机制 在经典注意力机制章节我们使用了一种软性注意力的方式进行Attention机制,它通过注意力分布来加权求和融合各个输入向量。而硬性注意力(Hard Attent…

    技术杂谈 2023年7月11日
    088
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球