Typescript学习——接口

2023-11-01

接口:interface

TypeScript 的核心原则之一就是对‘值’ 所具有的结构进行类型检查,而接口的作用就是为这些类型命名或为你的第三方代码定义契约。相当于定义了值的类型。

用法

const foo = (params: {name: string})=>{
	rerurn parasms
}

foo函数使用时,必须传入一个包含参数为name且类型为string,否则类型检查器会报错。

用interface来描述

interface TestParam {
	name: string
}

const foo = (params: TestParam)=>{
	rerurn parasms
}

这种写法,作用和上面相同,但是更加优雅,如果你的类型中包含很多,都写在参数后面的话,代码会很混乱。下面介绍一下interface的一些用法。

可选属性

interface TestParams {
  name: string,
  value?: number | null // 属性可选
}

const foo = (params: TestParam)=>{
	rerurn parasms
}
 

这里定义的value就是可选属性,在调用foo时,检查传入的参数时不会检查是否包含value值。

只读属性

它规定属性只有在对象创建时赋值,通过 readonly 来指定,定义为只读属性以后只可以访问不可以修改。

interface TestParams {
  readonly name: string, // 只读属性
  value?: number | null,
  ary: ReadonlyArray<number>  // 只读数组
}

const a: ITestParams = {name: 'a', value: 30, ary: [2, 3, 4]};

a.value = 40; 
a.name = 'b'; // 报错 readonly
const b = a.ary[0];
a.ary[1] = 45; // 报错 ReadonlyArray

针对接口除已定义属性外的额外属性的检查

如果我们不需要强制定义某个数据的类型,可以将它定义为any。

interface TestParams {
  name: string,
  value?: any
}

const foo = (params: TestParam)=>{
	rerurn parasms
}

定义函数类型的接口

interface TestFunction {
  (name: 'string', value: any): string // (形参格式): 返回值格式
}

const test: TestFunction = function(name, value) { 
  return name.toUpperCase();
}


定义类的接口

interface Person{
  say: {
    (name: string, age: number): boolean
  },
  name: string,
  age: number
}

class Man implements Person { 
  name: string;
  age: number;
  say(name, age) {
    return false;
  }
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}

和Java中类十分相似。

接口间的继承

interface Props {
  name: string
}

interface Props2 extends Props {
  age: number
}

const a: Props2 = {name: 'xxx', age: 89};

一个接口也可以继承多个接口。

interface Props1 {
  name: string
}


interface Props2 {
  age: number
}

interface Props3 extends Props1, Props2 { // 多继承
  color: string
}


const a: Props3 = {name: 'xxx', age: 89, color: 'red'};

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typescript学习——接口 的相关文章

随机推荐

  • Zotero——翻译神器推荐

    Zotero 翻译神器推荐
  • C++ deque容器详解

    C deque容器详解 deque容器基本概念 1 deque的构造函数 2 deque的赋值操作 3 deque的大小操作 4 deque的插入和删除 5 deque的数据存取 deque容器基本概念 功能 它是一个双端数组 可以对头端和
  • 【TensorFlow基础】加载和预处理数据

    目录 1 图像 1 1 配置环境 1 2 加载数据集 1 3 数据预处理 1 4 训练模型 2 CSV 2 1 配置环境 2 2 加载数据 2 3 数据预处理 2 4 构建模型 2 5 训练 评估和预测 3 Numpy 3 1 配置环境 3
  • 小米手机 解BL锁

    Beauty provoketh thieves sooner than gold As You Like It 解锁下载官网 解锁方法
  • 报错:ORA-00955:名称已由现有对象使用

    报错 ORA 00955 名称已由现有对象使用 查下名称看看 是不是已经有视图或者表存在 我遇到的是确实存在了 可能已经创建成功了 或者用个不一样的名称
  • MacBook M1 配置 tensorflow开发环境

    MacBook M1 配置 tensorflow开发环境 方法一 提示 目前MacBook M1在安装和配置深度学习的框架tensorflow上由于兼容性的问题存在着很多困扰 本文将给出详细的安装说明 文章目录 MacBook M1 配置
  • XiaoMi NoteBook Pro EFI 黑苹果引导文件

    TM1701 和 TM1707 规格 详细信息 电脑型号 小米笔记本电脑Pro 15 6 MX150 GTX 处理器 英特尔 酷睿 i5 8250U i7 8550U 处理器 内存 8GB 16GB 三星 DDR4 2400MHz 硬盘 三
  • ubuntu安装dlib

    电脑内部环境很多 传统pip无法安装 3 0环境有dlib 最近用2 7的环境 发现没有 好久没装了 试了一些方法并不work 还是用的老指令 conda install c menpo dlib 18 18
  • Word调用ChatGPT

    目录 前言 一 ChatGPT是什么 二 使用步骤 1 申请ChatGPT的API KEY 2 创建宏模块 3 添加工具栏按钮 4 使用此模块的方法 总结 前言 此文章目的是将ChatGPT作为工具在Word中直接使用 以快速生成自己想要的
  • 《计算机网络》(第8版)第三章 数据链路层 知识点总结

    文章目录 1 数据链路层的三个基本问题 1 1 封装成帧 framing 1 2 透明传输 1 3 差错检测 1 3 1 循环冗余检验CRC Cycle Redundancy Check 1 3 2 FCS计算图 2 点到点协议PPP及其透
  • 毕业设计 - 树莓派寝室宿舍门禁刷卡系统 - 物联网 单片机 嵌入式

    文章目录 0 前言 1 前言 2 主要器件 3 实物效果 4 树莓派读取 RC522 RFID 标签 5 mg90s 控制原理 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕
  • 公司网络故障总结

    公司网络故障总结 Author skate Time 2007 6 8 今天早上一到公司 刚坐下 买的早饭还没吃呢 就有人打电话反映不能上网 我以为是个别机器的问题 但我还是检测一下 查看网络是否畅通 查看结果是不通 于是就要分析原因 要尽
  • Redis基础与高可用集群架构进阶详解

    一 NoSQL简介 1 问题引入 每年到了过年期间 大家都会自觉自发的组织一场活动 叫做春运 以前我们买票都是到火车站排队 后来呢 有了 12306 有了它以后就更方便了 我们可以在网上买票 但是带来的问题 大家也很清楚 春节期间买票进不去
  • 西瓜书作业4.4(基于基尼指数划分决策树,未剪枝/预剪枝/后剪枝)

    文章目录 题目 未减枝 思想 画图 预剪枝 思想 画图 后剪枝 思想 画图 比较总结 参考 全部代码 画图代码 题目 试编程实现基于基尼指数进行划分选择的决策树算法 为表4 2中数据生成预剪枝 后剪枝决策树 并与未剪枝决策树进行比较 牢骚
  • 密码学与网络安全 - 11 密码学Hash函数

    11 密码学Hash函数 Hash函数输入长度可变 而输出长度固定 合格的Hash函数输出应该均匀分布 看起来随机 Hash函数两个要求 1 抗碰撞性 找到两个不同的输入对应相同的输出在计算上不可行 2 单向性 通过Hash值找到输入值在计
  • Vue突然报错 doesn‘t work properly without JavaScript enabled

    突然报错未启用JavaScript 下午演示项目的时候突然给我整了一出JavaScript未启用 当场就把我整尴尬了 然后我怀疑是不是写的路由守卫有问题就注释了再试 发现问题还在 然后经过各种骚操作以后 发现还是报这个js未启用 当场我就不
  • Idea 激活插件IDEA Eval Reset食用

    在setting中的Plugins中点击设置小图标 点击第一个选项 添加远程仓库 2 点击 号 输入 https plugins zhile io 3 搜索 IDEA Eval Reset 安装 4 Help gt Eval Restart
  • 短短半小时 创建自己的个性操作系统

    短短半小时 创建自己的个性操作系统 邹震 大家认为桌面使用比较困难 但是前段时间推出一款Whitefin 而且可以在半小时内自己创建个性操作系统 今天我们采访一下 熊伟 先生 熊伟 先生您好 我们想请您谈一下Whitefin这个的来源 熊伟
  • 分数构造方法java,Java--构造方法

    1 构造方法 类中的特殊方法 主要用于创建并初始化对象 2 特点 构造方法的名称与类名完全相同 没有返回值类型 定义的时候不用写 void 普通方法没有返回值的时候 要写void 创建对象时 触发构造方法的调用 不可以通过句点手动调用 方法
  • Typescript学习——接口

    接口 interface TypeScript 的核心原则之一就是对 值 所具有的结构进行类型检查 而接口的作用就是为这些类型命名或为你的第三方代码定义契约 相当于定义了值的类型 用法 const foo params name strin