typescript定义函数的传参、返回值

  • Render 函数中定义函数传参
interface List {id: number;name: string;
}interface Result {data: List[]; //表示由 List 接口组成的数组
}function Render(result: Result) {result.data.forEach(value => {console.log(value);});
}let result = {data: [{id: 1,name: '张三',},{id: 2,name: '李四',},{id: 3,name: '王五',},],
};Render(result);
  • 规范参数可选属性和只读属性
interface List {readonly id: number;name: string;age?: number;
}
  • 函数传参时如何绕过类型检查
    如果在接收的后端数据中,比约定好的接口多了一个字段,能否通过类型检查?会不会报错?
let result1 = {data: [{ id: 1, name: 'a', sex: 'male' },{ id: 2, name: 'b' },],
};
//这样是不会报错的,只要满足接口约定的必要条件即可
Render(result1);
//但如果这样调用,会报错,因为无法通过sex:"man"的类型检查。这时候需要用其他方法
Render({data: [{ id: 1, name: 'a', sex: 'male' },{ id: 2, name: 'b' },],
});

我们有三种方法:

  1. 通过接口定义变量,函数调用时传入变量名(只对必要的约定条件进行检查,多余的数据不做检查)
  2. 类型断言(所有约定都不做类型检查,失去了ts类型检查的意义)
  3. 索引签名
//类型断言
Render({data: [{ id: 'b', name: 3, sex: 'man' },{ id: 2, name: 'b' },],
} as Result); // 明确告诉编译器,数据符合Result,这样,编译器会绕过类型检查//使用索引签名解决
interface List {id: number;name: string;[sex: string]: any;
}

使用接口来定义函数的传参、返回值的类型

interface Add1 {(x: number, y: number): number;
}
let add1: Add1 = (a, b) => a + b;

使用类型别名来定义来函数的传参、返回值的类型

type Add2 = (x: number, y: number) => number;
let add2: Add2 = (a, b) => a + b;

直接在函数体中定义来函数的传参、返回值的类型

const Add3 = (x: number, y: number): number => {return x + y;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/36875.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式Linux系统编程 — 5.2 Linux系统时间与日期

目录 1 了解Linux系统时间 1.1 几种常用的时间 1.2 如何查看几种常用的时间 1.3 Linux 系统中的时间 2 time、gettimeofday获取时间 2.1 time函数 2.2 ​​​​​​​gettimeofday函数: 2.3 示例程序 3 时间转换函数 3.1 ctime与ctime_r函数 3.2 localti…

Unity之自定义Text组件默认属性值

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity之自定义Text组件默认属性值 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取!…

普通集群与镜像集群配置

一. 环境准备 关闭防火墙和selinux,进行时间同步 rabbitmq-1 Rocky_linux9.4 192.168.226.22rabbitmq-2Rocky_linux9.4192.168.226.23rabbitmq-3Rocky_linux9.4192.168.226.24 修改主机名#192.168.226.22 hostnamectl set-hostname rabbitmq-1#192.168.226.22 ho…

isalpha()方法——判断字符串是否只由字母组成

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 isalpha()方法用于判断字符串是否只由字母组成。isalpha()方法的格式如下: str.isalpha() 如果字符串中至少有一个字符并且所…

「C++系列」C++ 基本语法

文章目录 一、C 基本语法1. **预处理指令**2. **数据类型**3. **变量和常量**4. **运算符**5. **控制流语句**6. **函数**7. **数组**8. **指针和引用**9. **结构体和类**10. **输入/输出**11. **异常处理**12. **命名空间** 二、C 程序结构1. 程序流程结构2. 文件结构3. 编译预…

银河麒麟高级服务器操作系统V10SP2(X86)配置bond0的mac地址为指定子网卡的mac地址

银河麒麟高级服务器操作系统V10SP2(X86)配置bond0的mac地址为指定子网卡的mac地址 一 系统环境二 删除和备份原有配置2.1 down掉bond02.2 备份之前的bond配置到/root/bak2.3 删除bond配置(网卡文件根据实际情况变化) 三 新建bond0…

昇思25天学习打卡营第6天|MindSpore-ResNet50迁移学习

MindSpore-ResNet50迁移学习 迁移学习 图像的迁移学习是一种机器学习方法,它将已经在一个或多个源任务上训练好的预训练模型应用到新的目标任务上。这种方法的核心思想是,通过在大量数据上训练模型,学习到的特征表示可以用于其他相关任务,从而提高目标任务的性能。 应用场…

MySQL之聚簇索引和非聚簇索引

1、什么是聚簇索引和非聚簇索引? 聚簇索引,通常也叫聚集索引。 非聚簇索引,指的是二级索引。 下面看一下它们的含义: 1.1、聚集索引选取规则 如果存在主键,主键索引就是聚集索引。如果不存在主键,将使…

【Lua】第二篇:打印函数和注释

文章目录 一. 打印函数二. 注释方式1. 单行注释2. 多行注释 一. 打印函数 Lua 程序是以 .lua 结尾的文件,创建一个的 Test.lua 的文件,使用 print 函数输出字符串"Hello World": print(Hello World) 保存之后使用命令lua 文件名编…

MyBatis(14)MyBatis 如何实现多对一和一对多的映射关系

MyBatis 中实现多对一和一对多的映射主要依赖于映射文件中的 <association> 和 <collection> 标签。这两种映射关系的实现&#xff0c;是通过嵌套查询或嵌套结果映射来完成的。在源码层面&#xff0c;MyBatis 使用相应的处理器来处理这些标签&#xff0c;最终实现复…

elasticsearch-6.8.23的集群搭建过程

三个节点的 ElasticSearch 集群搭建步骤 准备三台机器&#xff1a;28.104.87.98、28.104.87.100、28.104.87.101 和 ElasticSearch 的安装包 elasticsearch-6.8.23.tar.gz ----------------------------- 28.104.87.98&#xff0c;使用 root 用户操作 ----------------------…

Java | Leetcode Java题解之第206题反转链表

题目&#xff1a; 题解&#xff1a; class Solution {public ListNode reverseList(ListNode head) {if (head null || head.next null) {return head;}ListNode newHead reverseList(head.next);head.next.next head;head.next null;return newHead;} }

SpringBoot学习04-[定制SpringMVC]

定制SpringMVC 定制SpringMvc的自动配置定制springmvc-configurePathMatch配置定制SpringMVC-拦截器Interceptor定制SpringMVC-CORS配置全局cors配置针对某个方法加跨域解决 WebMvcConfigurer原理定制SpringMVC-JSONJSON开发jackson的使用定制化json序列化和反序列化 JSON国际化…

CriticGPT: 用 GPT-4 找出 GPT-4 的错误

CriticGPT 是 OpenAI 发布的一个基于 GPT-4 的模型&#xff0c;它可以帮助我们人类 Review 并纠正 ChatGPT 在生成代码时的错误。使用 CriticGPT 审查代码时&#xff0c;有 60% 的概率生成的代码更好更正确。

最近写javaweb出现的一个小bug---前端利用 form 表单传多项数据,后端 Servlet 取出的各项数据均为空

目录&#xff1a; 一. 问题引入二 解决问题 一. 问题引入 近在写一个 java web 项目时&#xff0c;遇到一个让我头疼了晚上的问题&#xff1a;前端通过 post 提交的 form 表单数据可以传到后端&#xff0c;但当我从 Servlet 中通过 request.getParameter(“name”) 拿取各项数…

【小沐学AI】Python实现语音识别(faster-whisper-webui)

文章目录 1、简介1.1 whisper1.2 faster-whisper 2、安装3、测试结语 1、简介 1.1 whisper https://github.com/openai/whisper Whisper 是一种通用语音识别模型。它是在各种音频的大型数据集上训练的&#xff0c;也是一个多任务模型&#xff0c;可以执行多语言语音识别、语音…

软考初级网络管理员_04_硬件单选题

1.进程是程序的一次执行&#xff0c;()是进程存在的唯一标志。 程序 数据 进程控制块 进程标识符 2.(请作答此空)是计算机内部运算部件一次能同时处理的二进制数据位数。计算机的运行速度使用每秒钟所能执行的()指令数目来评估。 字长 带宽 内存 寄存器 3.某银行的一…

安装ant-design-vue的报错集合

20240629vue版本&#xff1a;4.x vue/cli5.x运行项目报错error Replace xxx with xxx prettier/prettier 解决办法_replace 路路路路路路路路 with 路路路路-CSDN博客 Ant Design 使用出现 Error_ Can‘t resolve ‘_antd_dist_antd.css‘-CSDN博客

【JVM基础篇】垃圾回收

文章目录 垃圾回收常见内存管理方式手动回收&#xff1a;C内存管理自动回收(GC)&#xff1a;Java内存管理自动、手动回收优缺点 应用场景垃圾回收器需要对哪些部分内存进行回收&#xff1f;不需要垃圾回收器回收需要垃圾回收器回收 方法区的回收代码测试手动调用垃圾回收方法Sy…

Matlab|分时电价环境下用户负荷需求响应分析方法

主要内容 本程序复现《分时电价环境下用户负荷需求响应分析方法》文献中的方法&#xff0c;通过用户对不同时间下用电需求的自弹性和交叉弹性系数分析获得用户需求响应矩阵&#xff0c;进而利用该矩阵对用户在实行基于电价的需求侧管理后的负荷变化情况进行快速分析。 1.1…