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学习——接口 的相关文章

  • Angular 4:在订阅中收到错误消息

    在服务中 有这样的代码 getUser id return this http get http id map res gt res json 在组件中 this myService getUser this id subscribe cu
  • AWS CDK CodePipeline 在源代码和构建之间添加一个阶段

    我跟着使用 CDK Pipelines 持续集成和交付 CI CD https docs aws amazon com cdk v2 guide cdk pipeline html实施 CodePipeline 的指南 我想知道如何在 CD
  • Angular:扩展服务和传递参数

    我很难理解如何在 Angular 中扩展服务 我有一个连接到 Firebase 并执行各种常见任务 获取 设置 更新 列表等 的服务 我没有为我的特殊组件重写它 而是尝试扩展它 我的想法是我可以只传递路径的新部分 但这会引发错误 Canno
  • Angular2 - 防止复选框被选中

    我有一个每行包含一个复选框的表 在表头中 我有一个Check All切换所有表格行框的复选框 我正在尝试实现一些逻辑 如果复选框的数量将超过特定限制 则显示错误并且不切换表行复选框或checkall盒子本身 有一个问题允许checkAll即
  • 安装 npm 包时无法解决依赖关系树错误

    当尝试使用安装 npm 包时npm i命令 我收到以下异常 我尝试重新安装 Node js 包并使用以下命令将代理设置为关闭 set HTTP PROXY set HTTPS PROXY 问题仍然存在 我做错了什么 Update 当我运行以
  • TypeScript 接口函数属性:有什么区别?

    有人可以解释一下 为什么在这段代码中 对 Interface 类型常量的赋值有效 但对 Interface 类型常量的赋值会抛出错误 interface InterfaceA doSomething data object boolean
  • 为什么TS中的通用接口不能正确推断类型?

    一旦 延长Explicit value 在泛型接口中使用时 TS 的类型系统会变得 愚蠢 即使代码 100 正确 function fn
  • 使用 XLSX.readFile 读取文件

    在 Typescript 中 执行时出现错误 无法读取未定义的属性 替换 const xlsx XLSX readFile fileName filename 是现有文件的路径 我读过 readFile https docs sheetjs
  • 使用 vue-cli 服务时如何禁用 linting?

    我正在使用以下命令使用 vue cli 运行我的项目 vue cli service 服务 open 如何禁用所有 linting 目前每次保存时都会重新进行 linting 并且更改代码需要很长时间 我已经把 lintOnSave fal
  • Typescript 参数 - 对象的通用数组和对象键的数组(部分)

    我想要一个接受对象数组和一些对象键数组的方法 该方法将返回对象值数组的数组 但仅返回选定键的数组 data firstName Jane lastName Doe firstName John lastName Doe fields fir
  • 在非 Angular 类中获取注入的依赖项

    我有当前的 和简化的 课程 export class NavigationItem constructor private router Router navigateTo this router navigate this id 我不想每
  • Angular 5 - 谷歌未定义(谷歌地图)

    我想在我的 Angular 5 应用程序上使用谷歌地图 但遇到了一些问题 加载视图时 我在 js 控制台中收到错误 LoginComponent Host ngfactory js sm 1 ERROR ReferenceError goo
  • 在 TypeScript 中使用最新的 JavaScript 功能,例如 ES2018

    我尝试搜索有关其配置的 TypeScript 文档 但似乎找不到这个简单问题的答案 简单地说 如何配置 TypeScript 编译器以便它知道我们正在使用哪些 JavaScript 功能集 例如 ES2019 发布了 我想 哦 想给我一些
  • Angular 中的单元测试点击事件

    我正在尝试将单元测试添加到我的 Angular 2 应用程序中 在我的一个组件中 有一个带有 click 处理程序 当用户单击按钮时 将调用在中定义的函数 ts类文件 该函数在 console log 窗口中打印一条消息 表明该按钮已被按下
  • 如何获取从类实例克隆的对象的类型?

    假设我有这个示例类 但实际上它有更多属性 class Foo name string dob number constructor name string dob number this name name this dob dob get
  • TypeScript 通过值类型缩小可索引类型的键范围

    假设我们有一个通用的可索引类型 我如何才能仅检索其值的类型以便能够缩小到仅某些键 imagine check is a function and its second argument only allows the property a
  • Nightmare.js 截图缓冲区长度 0

    我正在运行一个 night js 脚本 我试图在其中截取页面上多个元素的屏幕截图 The first元素被捕获得很好 但折叠下方的所有其他元素都以零长度捕获 我正在努力调试这个问题 任何帮助将非常感激 基本上这个脚本会遍历一个页面并选择al
  • typescript 中的重载签名和实现签名

    我正在阅读 Typescript 手册 我很难理解为什么以下代码片段有错误消息 function fn x string void function fn vo Expected to be able to call with zero a
  • 使用函数重载进行解构

    我正在尝试创建一个函数 该函数需要一对坐标或一个对象x and y属性并返回邻居列表 但由于某种原因 即使我检查了它的类型 我也无法解构该对象 interface Coords x number y number public getNei
  • 如何让 Typescript 获取声明文件?

    My file src auth ManagementAPI ts使用 Auth0 我需要使用自己的声明文件并创建src types auth0 d ts 然而 当我跑步时ts node 我收到此错误 TSError Unable to c

随机推荐

  • 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