【TS】函数和函数类型
在使用函数的时候,通常会给函数传值,或者给函数一个返回值调用,这个时候就会涉及到函数类型。
函数类型分为两个方面:
1、函数参数
2、函数返回值
语法: function 函数名( 参数 : 参数类型 ) : 返回值类型 { return 返回值 }
函数有几种不同的写法,分别为:声明函数、匿名函数。
声明函数: 也称为函数声明
、命名函数
,下面是声明函数的写法:
function add ( x : number ,y : number) : number {
return x + y
}
console.log(add(1,2)); // 打印 3
函数add
需要两个参数,x
和y
,并且这两个参数的类型都为数字,且这个函数必须有一个返回值,返回值为number
。 add() : number
这个 number
就是返回值规定的类型。
匿名函数: 也称为匿名函数
,函数表达式
,以表达式的形式呈现,写法跟声明函数一样,在括号内规定数据类型,括号外面规定返回值类型。
const add2 = function ( x : number , y : number ) : number {
return x + y
}
console.log(add2(3,3)); // 打印 6
函数add需要两个参数,x
和y
,并且这两个参数的类型都为数字,且这个函数必须有一个返回值,返回值为number。 add() : number
这个 number
就是返回值规定的类型。
无返回值
并不是所有的函数都有返回值,函数可以没有返回值,如果没有返回值,或者返回值为空,在函数()
后面: () : xxx
换成void
即可,void
就是无返回值,写成any
也行,any
可以返回任何类型。
// 无返回值 无返回值使用 void 或 any 即可
const emptys = ( params : number) : void => {
console.log(params);
}
emptys(2)
函数类型的完整写法
const add3 : ( x : number , y : number ) => number = function ( x : number , y : number ) : number {
return x + y
}
console.log(add3(10,10)); // 打印 20
步骤拆解:
1、add3 : ( x : number , y : number ) : number
这里为规定的函数类型,在这个地方定义了后,函数里面传参必须符合这里定义的规则。传两个参数
,类型为number
,返回值为number
。
2、function ( x : number , y : number ) : number { return x + y }
这里就是给函数传参和函数返回值类型规范,这里的规范必须符合前面定义的规范,否则报错。
一般不会用这种写法, 比较繁琐,这里只是举例说明一下。
函数类型使用接口
在函数类型传参中,既然在传参这里规定了数据类型,直接写在函数体上比便于阅读,看起来复杂且长,所以可以使用接口来优化代码,使阅读起来更加简洁。
// 定义接口
interface IPerson {
username : string
age : number
}
const person = (data : IPerson) : string => {
return `姓名:${data.username},年龄:${data.age}`
}
在person
函数中,传入的值必须是符合 IPerson
接口的规范,函数必须有返回值,返回值为 string
类型
// 参数
let obj = {
username : '东方不败',
age : 18
}
console.log(person(obj)); // 打印 姓名:东方不败,年龄:18
另外,接口是可以继承的,也就是说可以将多个接口组装成一个新的接口,在函数类型中使用这个接口,来大大减少类型规范方面的代码量。关于接口继承方面,请看另一篇【TS】接口和接口继承。
案例源码:https://gitee.com/wang_fan_w/ts-seminar
如果觉得这篇文章对你有帮助,欢迎点亮一下star
【TS】函数和函数类型的更多相关文章
- TypeScript 学习笔记 — 函数中的类型(四)
目录 函数的两种声明方式 可选参数 默认参数 剩余参数 函数的重载 this 的类型 对于函数主要关心的是:函数的入参类型 和 函数的返回值类型 函数的两种声明方式 通过 function 关键字来进 ...
- 【Go入门教程3】流程(if、goto、for、switch)和函数(多个返回值、变参、传值与传指针、defer、函数作为值/类型、Panic和Recover、main函数和init函数、import)
这小节我们要介绍Go里面的流程控制以及函数操作. 流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑.Go中流程控制分三大类:条件判断,循环控制和 ...
- C#调用C++编写的DLL函数, 以及各种类型的参数传递 (转载)
C#调用C++编写的DLL函数, 以及各种类型的参数传递 1. 如果函数只有传入参数,比如: C/C++ Code Copy Code To Clipboard //C++中的输出函数 int ...
- [c++][语言语法]函数模板和模板函数 及参数类型的运行时判断
参考:http://blog.csdn.net/beyondhaven/article/details/4204345 参考:http://blog.csdn.net/joeblackzqq/arti ...
- Oracle的函数返回表类型(转)
在SQL Server中有表变量,可以在function中方便地返回,习惯SQL Server或者需要把脚本从SQL Server转到Oracle中的朋友可以都会碰到这个问题. Oracle的func ...
- C++11用于计算函数对象返回类型的统一方法
[C++11用于计算函数对象返回类型的统一方法] 模板 std::result_of 被TR1 引进且被 C++11 所采纳,可允许我们决定和使用一个仿函数其回返值的类别.底下,CalculusVer ...
- IntelliSense 无法仅由函数的返回类型重装分辨
IntelliSense:无法仅由函数的返回类型重装分辨 d:\programfiles (x86)\microsoft sdks\windows\v7.0a\include\winbas ...
- UNIX高级环境编程(3)Files And Directories - stat函数,文件类型,和各种ID
在前面的两篇,我们了解了IO操作的一些基本操作函数,包括open.read和write. 在本篇我们来学习一下文件系统的其他特性和一个文件的属性,涉及的函数功能包括: 查看文件的所有属性: 改变文件所 ...
- 函数的类型:函数也是类型 (*)->*
函数的类型:函数也是类型 (*)->* 函数类型作为类型可以定义变量,使得函数变量具有可替代性,这个是高阶函数的编程基础. 使用函数的类型可以定义函数的变量,并用函数给这个变量赋值: 每一个函数 ...
- 【Go入门教程5】流程(if、goto、for、switch)和函数(多个返回值、变参、传值与传指针、defer、函数作为值/类型、Panic和Recover、main函数和init函数、import)
这小节我们要介绍Go里面的流程控制以及函数操作. 流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑.Go中流程控制分三大类:条件判断,循环控制和 ...
随机推荐
- 一步一图带你深入理解 Linux 物理内存管理
1. 前文回顾 在上篇文章 <深入理解 Linux 虚拟内存管理> 中,笔者分别从进程用户态和内核态的角度详细深入地为大家介绍了 Linux 内核如何对进程虚拟内存空间进行布局以及管理的相 ...
- 一文讲透CabloyJS全栈框架的来龙去脉
本文受众 咱们做软件开发,就好比是建造一幢幢房屋,一座座桥梁,既可以是北方宫殿的巍峨,也可以有南方庭院的雅致,更可以是横跨群山的峻险与孤悬.那么,不同的语言.不同的框架也都由其内在的秉质吸引着一批粉丝 ...
- 递归与Stream流转换
目录 递归与Stream流转换 list转为类中一个属性为key,类实例为value的Map list单独取出对象中一个属性成为集合/数组 步骤:--在此只写service层代码 递归与Stream流 ...
- Day29 Linux相关命令的使用
今日内容 基本概念 安装 基本命令 在linux上安装软件 jdk mysql jdk Nginx的安装 一.概述 1.Unix linux基于Unix,Unix由贝尔实验室在1969年开发 一开始由 ...
- 【每日一题】【归并排序/堆排序&虚拟头结点】148. 排序链表-211220/220217【出栈时不断容易产生环状链表!】
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 . 进阶: 你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗? 方法1:归并排序+使用辅助函数 ...
- 跟我学Python图像处理丨图像分类原理与案例
摘要:本篇文章将分享图像分类原理,并介绍基于KNN.朴素贝叶斯算法的图像分类案例. 本文分享自华为云社区<[Python图像处理] 二十六.图像分类原理及基于KNN.朴素贝叶斯算法的图像分类案例 ...
- Java单例模式的最佳实践?
"读过书,--我便考你一考.茴香豆的茴字,怎样写的?"--鲁迅<孔乙己> 0x00 大纲 目录 0x00 大纲 0x01 前言 0x02 单例的正确性 new关键字 c ...
- 【HarmonyOS】ArkTS Native开发——使用 system函数创建文件
ArkTS是HamronyOS优选的主力语言,但官方文档指南中对于Native应用开发并没有详细的描述,只有一篇Codelab可以学习(简易Native C++ 示例(ArkTS) (huawei ...
- [深度学习] ubuntu18.04配置深度学习环境笔记
最近装过很多ubuntu18.04系统的nvidia驱动,cuda10.2,cudnn7.6.5,发现每次都会出现一些小问题.总结了具体步骤,做个记录.主要分为三个步骤:驱动安装,cuda安装,cud ...
- [python] 基于wordcloud库绘制词云图
词云Wordcloud是文本数据的一种可视化表示方式.它通过设置不同的字体大小或颜色来表现每个术语的重要性.词云在社交媒体中被广泛使用,因为它能够让读者快速感知最突出的术语.然而,词云的输出结果没有统 ...