首页 > 其他分享 ># 函数类型

# 函数类型

时间:2023-12-25 18:00:43浏览次数:29  
标签:function return 函数 number 参数 类型 string

函数类型

在 JavaScript 中,有两种常见的定义函数的方式——函数声明(Function Declaration)函数表达式(Function Expression)

在 js 中,定义一个函数有一下两种方式:

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

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

函数声明

在 ts 中,同样可以使用,只不过需要对参数、返回值进行类型约束:

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

其中 x、y 必须是 number 类型,返回值也必须是 number 类型。

函数表达式

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

函数完整写法

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

函数参数可选

现在我们有一个函数:

let getName = function (x: string, y: string): string {
  return x + y
}
console.log(getName('你好,', '我是ed.'))

打印输出结果:

在这里插入图片描述

如果我们不想传递 y ,只传递 x 怎么办?很简单设置参数可选:

let getName = function (x: string, y?: string): string {
  return x + y
}
console.log(getName('我是ed.'))

我们用 ? 标识该参数可有可无。

打印结果:

在这里插入图片描述

因为我们只传了第一个参数,所以第一个参数打印成功,第二个参数没有传递,所以是 undefined。

但是要注意:需要注意的是,可选参数必须接在必需参数后面。换句话说,可选参数后面不允许再出现必需参数了。

默认参数

在 ES6 中,我们允许给函数的参数添加默认值,TypeScript 会将添加了默认值的参数识别为可选参数:

let getName = function (x: string = '我是ed.', y?: string): string {
  return x + y
}
console.log(getName())

设置 x 的默认参数为 “我是ed.”,调用方法的时候不传参,则直接使用默认参数。

此时就不受「可选参数必须接在必需参数后面」的限制了。

剩余参数

ES6 中,可以使用 ...rest 的方式获取函数中的剩余参数(rest 参数)。

// 剩余参数
function fun(a, ...args) {
    console.log(a, args);
}
fun(1, 2, 3, 4, 5, 6);

查看打印结果:

在这里插入图片描述

函数重载

重载允许一个函数接受不同数量或类型的参数时,作出不同的处理。

可以理解成函数名称是一样的,但是形参不同的多个函数。

比如,我们需要实现一个函数 reverse,输入数字 123 的时候,输出反转的数字 321,输入字符串 'hello' 的时候,输出反转的字符串 'olleh'。

利用联合类型,我们可以这么实现:

function reverse(x: number | string): number | string | void {
    if (typeof x === 'number') {
        return Number(x.toString().split('').reverse().join(''));
    } else if (typeof x === 'string') {
        return x.split('').reverse().join('');
    }
}

然而这样有一个缺点,就是不能够精确的表达,输入为数字的时候,输出也应该为数字,输入为字符串的时候,输出也应该为字符串。

这时,我们可以使用重载定义多个 reverse 的函数类型:

function reverse(x: number): number;
function reverse(x: string): string;
function reverse(x: number | string): number | string | void {
    if (typeof x === 'number') {
        return Number(x.toString().split('').reverse().join(''));
    } else if (typeof x === 'string') {
        return x.split('').reverse().join('');
    }
}

上例中,我们重复定义了多次函数 reverse,前几次都是函数定义,最后一次是函数实现。在编辑器的代码提示中,可以正确的看到前两个提示。

注意,TypeScript 会优先从最前面的函数定义开始匹配,所以多个函数定义如果有包含关系,需要优先把精确的定义写在前面。

标签:function,return,函数,number,参数,类型,string
From: https://www.cnblogs.com/wjw1014/p/17926675.html

相关文章

  • python枚举类型Enum
    在Python中,枚举类型可以通过enum模块来实现。enum模块提供了Enum类,用于创建具有命名值的枚举类型。枚举类型的创建方式包括使用类定义、使用函数和使用装饰器。1.定义一个枚举类fromenumimportEnumclassWeekday(Enum):MONDAY=1TUESDAY=2WE......
  • lightdb empty_clob/empty_blob 函数兼容性升级
    背景在Oracle中,长度为0的字符串被视为NULL.下文中长度为0的字符串被称为EMPTY_STRING.而PostgreSQL能够区别对待EMPTY_STRING和NULL.为了兼容Oracle的行为,在LightDB23.4版本前,已经基本将EMPTY_STRING当成了NULL.如,以下sql,select''::textisnull;......
  • 无涯教程-PostgreSQL - Functions(函数)
    PostgreSQL函数,也称为存储过程,使您能够执行通常会在数据库中的单个函数中进行多个查询和往返的操作,函数允许数据库重用,因为其他应用程序可以直接与您的存储过程进行交互,而无需中间层或重复代码。Functions-语法创建函数的基本语法如下-CREATE[ORREPLACE]FUNCTIONfuncti......
  • 如何通过云函数操作云数据库?
    本文分享自天翼云开发者社区《如何通过云函数操作云数据库?》,作者:不知不觉随着云计算的普及,云数据库作为一种高效、灵活和可靠的数据存储和管理服务,为企业提供了强大的支持。而云函数作为云计算的重要组成部分,为开发者提供了在云端执行代码的能力。本文将探讨如何通过云函数操作云......
  • CLR/C++回调函数callback和C# delegate的互相转换
    在进行CLR/C++进行开发的时候会经常遇到C++回调函数和C#的delegate之间的相互转换,例如在C++非托管类型的代码中的回调函数需要使用C#类的函数,或者是在C#代码中需要使用非托管C++的函数,这时候就需要在回调函数和delegate代理之间进行转换。C++:回调函数:typedefvoid(*pfunc)(in......
  • 【flink番外篇】5、flink的window(介绍、分类、函数及Tumbling、Sliding、session窗口
    Flink系列文章一、Flink专栏Flink专栏系统介绍某一知识点,并辅以具体的示例进行说明。1、Flink部署系列本部分介绍Flink的部署、配置相关基础内容。2、Flink基础系列本部分介绍Flink的基础部分,比如术语、架构、编程模型、编程指南、基本的datastreamapi用法、四大基......
  • # TypeScript 类型声明、数据类型
    TypeScript类型声明、数据类型好烦数据类型JavaScript的类型分为两种:原始数据类型(Primitivedatatypes)和对象类型【引用数据类型】(Objecttypes)。原始数据类型包括:布尔值、数值、字符串、null、undefined以及ES6中的新类型Symbol和ES10中的新类型BigInt。类型声......
  • C语言: 函数 值传递 || 指针传递
    在C语言中,函数可以使用指针传递和值传递来传递参数。通常情况下,使用值传递是最常见和最简单的方式。在值传递中,函数的参数会被复制一份,然后传递给函数。这意味着在函数内对参数的修改不会对原始数据产生影响。当你只需要传递一个简单的数据类型,如整数或浮点数时,值传递是......
  • vscode打开vue3,报红,ts类型找不到问题
    vscode不用禁用原有的插件Veyur和javascriptVue之前vscode检测到vue3,自动推荐安装了VueLanguageFeature(Volar),但用它扔有类型报错。官方推荐,使用它时禁用Vetur,以免有冲突。只需安装TypeScriptVuePlugin(Volar)并且打开,设置中的命令面板,快捷键f1,搜索type:select,选......
  • 三、函数、时间格式化
    1.函数2.时间格式化  1.函数#不可变对象实例:数字、字符串、元组,如数字,变量赋值a=5后再赋值a=10,这里实际是新生成一个int值对象10,再让a指向它,而5被丢弃,不是改变a的值,相当于新生成了a。#可变对象实例:列表、集合、字典,如变量赋值la=[1,2,3,4]后再赋值la[2]=5......