Ts中函数的使用

2023-11-06

函数

基本示例

和 JavaScript 一样,TypeScript 函数可以创建有名字的函数和匿名函数

// 命名函数
function add(x, y) {
  return x + y
}

// 匿名函数
let myAdd = function(x, y) { 
  return x + y;
}

函数类型

function add(x: number, y: number): number {
  return x + y
}

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

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

书写完整函数类型

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

可选参数和默认参数

TypeScript 里的每个函数参数都是必须的, 简短地说,传递给一个函数的参数个数必须与函数期望的参数个数一致。

JavaScript 里,每个参数都是可选的,可传可不传。 没传参的时候,它的值就是 undefined。 在TypeScript
里我们可以在参数名旁使用 ? 实现可选参数的功能。

在 TypeScript 里,我们也可以为参数提供一个默认值当用户没有传递这个参数或传递的值是 undefined 时。 它们叫做有默认初始化值的参数。 让我们修改上例,把firstName 的默认值设置为 “A”。

function buildName(firstName: string='A', lastName?: string): string {
  if (lastName) {
    return firstName + '-' + lastName
  } else {
    return firstName
  }
}

console.log(buildName('C', 'D'))
console.log(buildName('C'))
console.log(buildName())

剩余参数

在 JavaScript 里,你可以使用 arguments 来访问所有传入的参数。

在ts中剩余参数会被当做个数不限的可选参数。 可以一个都没有,同样也可以有任意个。 编译器创建参数数组,名字是你在省略号( …)后面给定的名字,你可以在函数体内使用这个数组。

function info(x: string, ...args: string[]) {
  console.log(x, args)
}
info('abc', 'c', 'b', 'a')

函数重载

函数重载: 函数名相同, 而形参不同的多个函数

/* 
函数重载: 函数名相同, 而形参不同的多个函数
需求: 我们有一个add函数,它可以接收2个string类型的参数进行拼接,也可以接收2个number类型的参数进行相加 
*/

// 重载函数声明
function add (x: string, y: string): string
function add (x: number, y: number): number

// 定义函数实现
function add(x: string | number, y: string | number): string | number {
  // 在实现上我们要注意严格判断两个参数的类型是否相等,而不能简单的写一个 x + y
  if (typeof x === 'string' && typeof y === 'string') {
    return x + y
  } else if (typeof x === 'number' && typeof y === 'number') {
    return x + y
  }
}

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

Ts中函数的使用 的相关文章

随机推荐

  • Tomcat 相关配置参数说明,性能调优

    Tomcat 相关配置参数说明 1 server xml connect中相关参数说明
  • 爬虫简单爬取网页图片

    仅供学习 请遵守法律法规和robots协议 请在爬取时设置爬取延时 防止给网站造成不必要的麻烦和损失 也避免给自己送进去 爬取图片一般需要导入的库有 import requests import re 正则表达式 import os os用
  • 多线程提高spark streaming数据写入到数据库

    多线程提高spark streaming数据写入到数据库 需求 集群环境资源有限 需要跑多个spark streaming任务 每个任务必须占据1核 cpu利用率很低 需要对数据进行实时统计更新到数据库mysql给业务实时展示 数据聚合程度
  • java-打印项目相对路径的根目录

    IDEA里 System out println System getProperty user dir
  • Java中栈Stack的bug(继承) 以及自己实现一个栈 支持范型 动态扩展

    问题 解决一 封装Stack 解决二 自己实现 Array java ArrayStack java 问题 import java util Stack public class Main public static void main S
  • 【论文笔记】对比学习综述

    跟李沐学AI的b站视频视频 论文精读笔记第五期 https www bilibili com s video BV19S4y1M7hm 最后有总结 请添加图片描述
  • Java 中通过 key 获取锁的正确方式

    一 概览 本文我们将了解如何通过特定键获取锁 以保证该键上的操作的线程安全 并且不妨碍其他键 一般来说 我们需要实现两个方法 void lock String key void unlock String key 本文以字符串作为键为例 大
  • hive报错FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException

    问题描述 创建表时 没有问题 简单插入数据出现这个报错 hive报错FAILED SemanticException org apache hadoop hive ql metadata HiveException Failed to ex
  • ffmpeg windows编译及调试完整版

    目录 编译 基础环境准备 依赖环境安装 依赖库安装 X264 fdk aac X265 ffmpeg 4 3 6 调试 基础项目环境搭建 VS2019项目创建 VS2019项目代码 vs2019配置 VS2019调试 编译 基础环境准备 1
  • 多行字符串无法匹配问题处理

    关于多行字符串无法匹配的问题 处理当前问题 需要加上下面的东西 Pattern MULTILINE Pattern DOTALL 这样才能处理多行问题 防止拿不到匹配符中的效果 这里简单的处理方式入如下所示 Pattern patternC
  • 《MySQL实战45讲》读后感 21

    在上一篇文章中 我和你介绍了间隙锁和 next key lock 的概念 但是并没有说明加锁规则 间隙锁的概念理解起来确实有点儿难 尤其在配合上行锁以后 很容易在判断是否会出现锁等待的问题上犯错 所以今天 我们就先从这个加锁规则开始吧 首先
  • aspose java api_NetBeans中如何下载并使用Aspose Java API和示例

    为了提升文件格式应用程序界面 API 的用户体验 Java NetBeans是Java开发人员在管理Java项目 开发组件或应用程序时使用最多的集成开发环境之一 为了让他们在NetBeans项目中通过一个简单的点击就能下载和使用多个Aspo
  • NITIRE 2023官方的PSNR及SSIM计算代码

    NITIRE 2023官方的PSNR及SSIM计算代码 问题描述 做图像复原任务时 总避免不了计算PSNR和SSIM等图像质量评估指标 但是网上实在是太多计算这类指标的代码了 不同代码计算的结果还可能存在差异 有使用matlab计算SSIM
  • 提高C++性能的编程技术笔记:多线程内存池+测试代码

    为了使多个线程并发地分配和释放内存 必须在分配器方法中添加互斥锁 全局内存管理器 通过new 和delete 实现 是通用的 因此它的开销也非常大 因为单线程内存管理器要比多线程内存管理器快的多 所以如果要分配的大多数内存块限于单线程中使用
  • MySQL多表操作:建表与多表查询

    目录 多表间的建表原则 一对多 多对多 一对一 实例演示多表查询 数据准备 多表查询 笛卡尔积 内连接 隐式内连接 显式内连接 外连接 左外连接 右外连接 子查询 子查询的多种情况 多表间的建表原则 一对多 如分类与商品是一对多的关系 一个
  • 花了 44 大洋,我实现 Java 发送短信功能!

    本篇为从 0 到 1 的一个 用 Java 对接腾讯短信发送功能的一篇流程文章 而标题中的 44 大洋则是用来购买短信套餐 当然如果你是首次使用腾讯云平台则可以享受 免费使用 这一功能 我是老用户 那 废话不多说 我们往下看对接步骤 1 短
  • java设计模式之代理模式

    什么是代理模式 为什么要使用代理模式 代理模式属于结构型 通过目标对象类完成其实现 静态代理 静态代理要求目标对象和代理对象实现同一个业务接口 由目标类去创建和实现 代理类负责实现增强 静态代理的缺点 代理类和目标类实现了相同的接口 每个代
  • CUDA编程一天入门

    目录 0 环境准备 1 套路 2 并行执行内核设置 3 示例代码simpleTexture3D 4 参考链接 0 环境准备 1 套路 CUDA 编程模型是一个异构模型 其中同时使用 CPU 和 GPU 在 CUDA 中 主机是指 CPU 及
  • MySQL-删除命令的区别

    MySQL 删除命令的区别 一 drop命令 1 删除数据库 DROP DATABASE IF EXISTS 数据库名 例 drop database if exists aa 2 删除数据表 DROP TABLE IF EXISTS 表名
  • Ts中函数的使用

    函数 基本示例 和 JavaScript 一样 TypeScript 函数可以创建有名字的函数和匿名函数 命名函数 function add x y return x y 匿名函数 let myAdd function x y return