当前位置: 首页 > news >正文

TypeScript——函数(函数定义类型、可选参数和默认参数、剩余参数、函数类型变量、使用接口封装函数变量类型)

目录

 一、函数

1、为函数定义类型

2、可选参数和默认参数

3、剩余参数

4、函数类型变量

5、使用接口封装函数变量类型


 一、函数

接口可以描述函数类型;为了使用接口表示函数类型,我们需要给接口定义一个调用签名。它就像是一个只有参数列表和返回值类型的函数定义。参数列表里面的每个参数都需要名称和类型。

1、函数形参必须声明数据类型,返回值可以不声明数据类型(根据函数体种的逻辑推到出的)

2、声明式  定义式(当作数据引用)

1、为函数定义类型

function add(x: number, y: number): number {
    return x + y;
}
let myAdd = function(x: number, y: number): number { return x + y; };

我们可以给每个参数添加类型之后再为函数本身添加返回值类型。 TypeScript能够根据返回语句自动推断出返回值类型,因此我们通常省略它。

2、可选参数和默认参数

传递给一个函数的参数个数必须与函数期望的参数个数一致。

function buildName(firstName: string, lastName: string) {
    return firstName + " " + lastName;
}

let result1 = buildName("Bob");                  // error, too few parameters
let result2 = buildName("Bob", "Adams", "Sr.");  // error, too many parameters
let result3 = buildName("Bob", "Adams");         // ah, just right

不过,在TypeScript里我们可以在参数名旁使用 `?`实现可选参数的功能。毫无疑问,可选参数必须跟在必选参数后面,捋一捋就明白了。

function buildName(firstName: string, lastName?: string) {
    if (lastName)
        return firstName + " " + lastName;
    else
        return firstName;
}

let result1 = buildName("Bob");  // works correctly now
let result2 = buildName("Bob", "Adams", "Sr.");  // error, too many parameters
let result3 = buildName("Bob", "Adams");  // ah, just right

当然,还可以给参数设置默认值,在所有必选参数后面带默认值的参数都是可选的,与可选参数一样,在调用函数的时候可以省略。

ps:带默认值的参数不需要放在必选参数的后面。 如果带默认值的参数出现在必须参数前面,用户必须明确的传入 `undefined`值从而来获得默认值。

3、剩余参数

在js里面叫rest参数   ...restArr

function buildName(firstName: string, ...restOfName: string[]) {
  return firstName + " " + restOfName.join(" ");
}

let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");

4、函数类型变量

  1. 变量的类型可以声明为函数类型;

let myAdd: (x: number, y: number) => number =
    function(x: number, y: number): number { return x + y; };

2.函数类型属于自定义类型,包含两部分:参数类型和返回值类型;

//声明一个变量并指定类型为自定义的函数类型
let myadd:(x:number, y:number)=>number;
//声明一个函数
function add(x: number, y: number): number {
	return x + y;
}
//把函数赋值给类型为函数类型的变量
myadd = add;

//赋值匿名函数
myadd =  function(x: number, y: number): number {
	return x + y;
}
//赋值箭头函数
myadd =  (x: number, y: number):number=>{
	return x + y;
}

3.只要参数类型是匹配的,那么就认为它是有效的函数类型,并不要求参数名一样,很多时候参数名是为了增加可读性

let myAdd: (baseValue: number, increment: number) => number =
    function(x: number, y: number): number { return x + y; };

4.在函数和返回值类型之前使用( `=>`)符号,返回值类型是函数类型的必要部分,如果函数没有返回任何值,你也必须指定返回值类型为 `void`而不能留空。

5、使用接口封装函数变量类型

自定函数类型代码往往很长,可以使用接口来封装该类型,之后使用接口来代表该类型

//函数类型接口
interface addType {
	(baseVaule:number, increValue:number):number
}
function add(x: number, y: number): number {
	return x + y;
}
let myadd1:addType = add;
let myadd2:addType = (x:number, y:number):number=>{
	return x+y;
}

相关文章:

  • T1056点和正方形的关系 (信息学一本通C++)
  • 【Selenium】一网打尽 小窗口滑动 全窗口滑动
  • 大数据必学Java基础(六十三):COW并发容器讲解
  • AutoCAD2014与致命的错误与独显直连
  • 联邦学习系列---读书个人总结
  • MyBatis概述、maven构建、Mapper接口及ORM思想
  • 【MyCat2】学习笔记(二)
  • 【洛谷题解/USACO题解】P2746 【USACO5.3】校园网Network of Schools
  • 防火墙iptables
  • Apiserver 执行顺序
  • Spring5 框架 ---- IOC容器(二)
  • Java面试题9.24
  • 【Visual Studio 2020】debug,release,配置属性,名词解释
  • 国庆节快到了,用 Python 给自己制作国旗头像,其实很简单。
  • 只用十几行python代码向靓仔打招呼?这不分分钟~
  • [deviceone开发]-do_Webview的基本示例
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Apache的80端口被占用以及访问时报错403
  • css的样式优先级
  • Git初体验
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • js
  • JS实现简单的MVC模式开发小游戏
  • nginx 负载服务器优化
  • PHP 小技巧
  • vagrant 添加本地 box 安装 laravel homestead
  • 安卓应用性能调试和优化经验分享
  • 读懂package.json -- 依赖管理
  • 基于webpack 的 vue 多页架构
  • 基于游标的分页接口实现
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 力扣(LeetCode)357
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端路由实现-history
  • 前端学习笔记之观察者模式
  • 数组大概知多少
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 在Unity中实现一个简单的消息管理器
  • zabbix3.2监控linux磁盘IO
  • 湖北分布式智能数据采集方法有哪些?
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (6)STL算法之转换
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (二开)Flink 修改源码拓展 SQL 语法
  • (十八)三元表达式和列表解析
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net framework4与其client profile版本的区别
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献