TypeScript 06:函数类型与四大特殊类型

【TypeScript系列教程06】基础类型 目录 TypeScript 基础类型 任意类型 (any) 变量的值会动态改变时 改写现有代码时 定义存储各种类型数据的数组时 数字类型 (number) 字符串类型 (string) 布尔类型 (boolean) 数组类型 (无) 元组 (无) 枚举 (enum) void (void) null / undefined / never null (null) undefined (undefined) never (never) TypeScript 基础类型 阅读详情

TypeScript 06:函数类型与四大特殊类型

有 JS 基础即可阅读。建议先读第 01~05 课。

1. 函数的「形状」也是一种类型

参数列表 + 返回值 = 函数类型,可以像 interface 一样起名复用:

type Handler = (msg: string) => void // 参数名只起文档作用,类型才是重点

用它标注「接收函数的函数」,传回调时回调的参数自动获得类型(上下文推断):

function repeat3(action: Handler) {
  action('a')
  action('b')
}

repeat3((msg) => console.log(msg)) // msg 自动是 string,不用写注解

写回调从不标参数类型的便利,全部来自这条规则——签名定在「接收方」,调用方自动跟随。

2. void:调用方「不该用」返回值,不是「必须没有」

const logs: string[] = []
const logger: Handler = (msg) => logs.push(msg) // push 明明返回 number,却合法

void 是站在调用方视角的约定:「返回值没有意义,别用」。所以 () => void 能收留各种「有返回值的函数」——事件处理、forEach 回调都靠这条宽松规则。

3. 函数重载:一个函数,多套签名

场景:参数组合不同、返回类型不同。写法 = 多条签名声明 + 一条实现,调用方只看得到声明:

function pad(value: number, width: number): string // 数字补零
function pad(value: string): string // 字符串原样
function pad(value: number | string, width?: number): string { // 实现,调用方看不到
  return typeof value === 'number' ? String(value).padStart(width ?? 0, '0') : value
}

pad(7, 3) // ✅ 匹配第 1 个签名
pad('hi') // ✅ 匹配第 2 个
pad('hi', 5) // ❌ No overload matches this call
pad(1) // ❌ 数字版必须给 width

重载的价值:把「哪些参数组合合法」显式列出来,而不是用一个宽泛的联合签名把非法组合也放行。日常业务少写(参数对象/联合 + 收窄常够用),但库源码大量使用,要能看懂。

4. 四大特殊类型辨析

类型一句话典型来源
any放弃检查,读写都不查JSON.parse、无类型的第三方库
unknown未知,用前必须收窄外部数据的安全形态
void没有有意义的返回值(调用方视角)无 return 的函数
never不可能有值throw 函数、穷尽检查兜底(第 04 课)
const a: any = JSON.parse('{}') // 读写都不查,危险
const u: unknown = JSON.parse('1') // 先收窄再用,安全

function log(msg: string): void {} // 调用方别用它的返回值

function fail(msg: string): never {
  throw new Error(msg) // 函数永不正常返回 → 推断为 never
}
// fail() 之后的代码不可达,TS 知道

记住两个极端,四个类型就串起来了:

unknown 最宽(任何值都能赋给它);never 最窄(它不能赋给任何类型)。any 是「跳过检查的未知」,void 是「为空的返回」。

5. 高频报错速查

报错人话
No overload matches this call参数组合不匹配任何一套签名
This expression is not callable把非函数当函数调了
Type 'X' is not assignable to type 'never'穷尽检查或类型冲突抓到了你
Expected 2 arguments, but got 1参数个数不对(对重载同样生效)
ESP32-S3模组上兼容SCCB总线与I2C总线的解决方案(1) 阅读详情

相关推荐

[Pytorch案例实践001]手写MNIST数字识别

Pytorch实现手写数字识别,带完整数据集。

2403_83044722的博客 1116

【TS】TypeScript函数类型:提升函数的类型安全性和可读性

在JavaScript中,函数是一等公民,它们可以被赋值给变量、作为参数传递,甚至作为其他函数的返回值。TypeScript作为JavaScript的超集,不仅继承了这些特性,还为函数添加了强大的类型系统支持。本文将深入探讨TypeScript中的函数类型,包括其定义、使用方法以及高级特性,帮助您更好地在TypeScript项目中使用函数,提高代码的类型安全性和可读性。

鑫宝的博客 2113

告别U盘!在Ubuntu 22.04上从零搭建PXE网络装机服务器(支持UEFI/Legacy双启动)

本文详细介绍了在Ubuntu 22.04上搭建PXE网络装机服务器的完整流程,支持UEFI/Legacy双启动模式。通过配置DHCP、TFTP和HTTP服务,实现无需U盘的高效批量系统部署,解决传统安装方式的介质依赖、版本控制和时间成本问题,显著提升机房维护和设备部署效率。

weixin_42569329的博客 249

TypeScript实战-06-TS接口之函数类型接口

一,前言 上篇介绍了TS接口的对象类型接口 本篇介绍TS的另一种接口:函数类型接口 二,函数定义方式 1,在TS中,可以使用一个变量直接定义函数: // 1,使用变量定义函数 let add: (x: number, y: number) => number 2,还可以使用接口来定义函数: // 2,使用接口定义函数 interface Add { (x: number, y: nu...

BraveWangDev 5952

电路抗干扰原理及应用(1)

电路抗干扰原理——介绍干扰源、干扰途径、抗干扰技术(接地技术)

qq_34758408的博客 2067

手把手教你搭建自己的 API 中转站

本文介绍了如何通过开源工具CLIProxyAPI(CPA)搭建本地AI模型代理服务,解决多工具切换、海外API访问困难等问题。CPA可将OpenAI、Gemini等不同服务的API统一封装,用户只需配置一次账号信息,所有客户端即可通过标准接口访问。文章详细讲解了CPA的下载安装、配置修改、账号导入及客户端连接方法,并强调其经济性、可控性和集中管理优势。通过自建中转站,用户可避免第三方服务的质量风险,实现多账号负载均衡,构建个人AI资源池。最后提供了网络配置等实用建议,帮助开发者高效使用AI编程工具。

DongJiYong_20的博客 1837

TypeScript系列之--有趣理解函数类型&泛型

软件工程的一个重要部分就是构建组件,组件不仅需要有定义良好和一致的 API,也需要是可复用的(reusable)。利用泛型,我们可以创建一个支持众多类型的组件,这让用户可以使用自己的类型消费(consume)这些组件。本质上,泛型可以理解为一个类型层面的函数,当我们指定具体的输入类型时,得到的结果是经过处理后的输出 类型 ,平时我们都是对值进行编程,泛型是对类型进行编程。这里的T就好似一个变量,他是什么类型由用户使用的时候传入, 通过泛型我们就能做到了输入和输出的类型统一,且可以输入输出任何类型。

m0_52952413的博客 1372

全网最详细教程,手把书教你使用YOLOv10训练自己的数据集和推理(附YOLOv10网络结构图)

YOLOv10,由清华大学多媒体智能组只开发,是一款亳秒级实时端到端目标检测的开源模型。该模型在保持性能不变的情况下,与YOLOv9相比,延迟减少了46%,参数减少了25%,非常适合需要快速检测物体的应用,如实时视频分析、自动驾驶和智能医疗等领域。这些改进使得YOLOv10在实时物体检测领域达到了新的技术水平。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1万+

06_Typescript接口的使用

Typescript接口的使用 接口的声明 在前面我们通过type可以用来声明一个对象类型: 对象的另外一种声明方式就是通过接口来声明: 他们在使用上的区别,我们后续再来说明。接下来我们继续学习一下接口的其他特性。 可选属性 接口中我们也可以定义可选属性: 接口中也可以定义只读属性:这样就意味着我们再初始化之后,这个值是不可以被修改的; 索引类型 前面我们使用interface来定义对象类型,这个时候其中的属性名、类型、方法都是确定的,但是有时候我们会遇到类似下面的对象: 函数类型 前面我们都是通

酒客的博客 353

Ubuntu零基础入门到精通【4.4讲】:网络、蓝牙、显示器、声音与输入法设置!

🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。 本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。

**My Coding Family** 1487

FlexSim:FlexSim软件介绍与安装

在开始安装FlexSim之前,首先需要从FlexSim官方网站下载安装包。FlexSim提供不同版本的软件,包括教育版、专业版等,确保选择适合您需求的版本。下载页面通常会列出系统要求,包括操作系统、处理器、内存和硬盘空间,确保您的计算机满足这些要求。访问FlexSim官方网站。导航至下载页面。选择适合您需求的FlexSim版本。点击下载按钮,开始下载安装包。在开始构建模型之前,首先需要明确模型的目标。模型目标是指导模型设计和分析的核心,它定义了你希望通过模型解决的问题或探索的系统行为。

kkchenjj的博客 5806

TypeScript函数类型:提升函数的类型安全性和可读性

你可以通过类型别名(Type Aliases)或接口(Interfaces)来定义函数类型。这里我们主要关注类型别名的方式,因为它更直接且常用于函数类型的定义。// 定义一个函数类型,它接受一个string类型的参数并返回一个number类型的值// 使用这个类型别名定义一个函数// 注意:这里实际上返回的是number,但表示字符串长度的方式有误,仅用于演示// 更正为返回数字类型的例子// 尝试使用错误类型的参数调用stringToNumber函数(TypeScript编译器会报错)

shiming8879的博客 553

ARFoundation系列讲解 - 手部跟踪编程

通过使用ARFoundation的手部跟踪子系统,我们可以轻松地在AR应用程序中实现与用户手部的交互。通过设置AR环境、创建场景和相机、添加手部跟踪功能以及编写相应的脚本,我们可以开始在AR场景中跟踪和操作用户的手部。在Unity中创建一个新场景,并将AR Session组件添加到场景中的一个空对象上。手部跟踪的具体实现可能因AR设备和平台的不同而有所差异,你可能需要根据你的使用情况进行一些适配和调整。当你将手部放入AR场景中时,手部跟踪系统将触发相应的事件,并调用脚本中的回调函数。

2301_79325339的博客 357

Hello Typescript(04)-- 函数类型接口、混合类型接口、类接口

函数类型接口 // 接口 interface Add { (a: number, b: string): number; } // 实现具体的函数 let add: Add = (a, b) => a + b; 混合类型接口 因为 JavaScript 其动态灵活的特点,有时你会希望一个对象可以同时具有上面提到的多种类型。 interface Lib { (): void; // 函数 version: string; // 属性 dosomething(): void; //

iamxuqianqian的博客 557

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

TypeScript基础-函数类型

根据类型约束函数的参数类型和返回值类型。1、函数类型接口定义。

路人甲 204

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

TypeScript学习06-TypeScript 面向对象

abstract表示是抽象的,他是一个关键字,以前的时候讲过关键字 const/let/switch/class/funciton保留字表示为目前来说可能还没有用到、未来的话可能会提升为一个关键字,保留字或者关键字都不能作为是变量的名字我们知道,继承是多态使用的前提所以在定义很多通用的调用接口时, 我们通常会让调用者传入父类,通过多态来实现更加灵活的调用方式。但是,父类本身可能并不需要对某些方法进行具体的实现,所以父类中定义的方法,,我们可以定义为抽象方法。什么是 抽象方法?

沉睡的猫的博客 1115

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

TypeScript 接口

定义了一个名为Personname:必需的属性,且类型为字符串string。age: 必需的属性,类型为数字number。

咸鱼滚滚 1552

前端基础知识TypeScript 系列 - 06( TypeScript 中函数的理解?与 JavaScript 函数的区别)

TypeScript函数功能解析:作为JavaScript的扩展,TypeScript在函数使用上保留了JavaScript的基础形式(function/箭头函数),并新增了类型系统支持。通过参数类型注解、返回值类型定义和类型推断机制,增强了函数的安全性。特别提供了可选参数(?标记)、剩余参数(...语法)和函数重载(需先声明再统一实现)等特性,使函数定义更灵活。类型系统要求重载时必须精确声明所有可能形式,并在实现时用联合类型处理多参数情况,保证了代码的严谨性。这些改进使TypeScript函数成为构建可维

m0_67078501的博客 479

TypeScript由浅到深(上篇)

TypeScript由浅到深入

qq_52031408的博客 1160

06-TypeScript配置及说明

TS配置 ???? 功课 什么是 tsconfig.json? 如果目录中存在 tsconfig.json 文件表明该目录是 TS 项目的根目录。TS 不是原生的 JS 代码,需要进行编译才能转换为 JS 代码。tsconfig.json 文件指定了编译项目所需的根文件和编译器选项。 ???? 如果是 JS 项目,也可以用 jsconfig.json 编译。 使用 GitHub 上的基本配置 根据你的 JavaScript 运行时环境(node10、node12、node14、React Native等

bee-code的博客 1008

TypeScript:接口

TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”。 在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。

ChinaDragon10的博客 805

TypeScript中的接口(Interface):对象类型的强大工具

在TypeScript中,接口是一种用于定义对象类型的方式。它描述了一个对象应该具有的属性和方法,但不包含实现细节。接口可以看作是一种"契约",定义了对象应该遵守的规则。使用interface。

zz130428的博客 997

【免费下载】 TypeScript 电子书下载

TypeScript 电子书下载 【下载地址】TypeScript电子书下载 TypeScript 电子书下载 项目地址: https://gitcode.com/Open-source-documentation-tutoria...

gitblog_06614的博客 1339

一文搞懂 TS中 函数、枚举、别名 | TypeScript 入门指南 06

主要讲解ts中的 函数、枚举、别名应用~ 如有不对的地方 欢迎留言反馈哈

程序员一诺 1139

【TS】TypeScript声明文件:打通JavaScript和TypeScript的桥梁

声明文件是以.d.ts为扩展名的文件,它们不包含实现代码,而是包含了TypeScript的类型声明。这些文件的主要目的是为JavaScript库提供类型信息,使TypeScript能够进行类型检查和提供智能提示。

鑫宝的博客 9407

TypeScript 基础类型与高级类型

在 JavaScript 中,变量是没有类型的,变量的值的类型是在确定的,这被称为。这意味着可以在不同的时间将不同类型的值赋给同一个变量,并且 JavaScript 会在运行时根据当前赋给变量的值来确定其类型。的类型随着每次赋值而改变。JavaScript 会在运行时根据实际赋给变量的值来自动调整和处理其类型。这种动态类型的特性使得 JavaScript 非常灵活,但也可能导致一些难以察觉的错误,因为类型的变化可能会在不经意间发生。

咸鱼滚滚 1181
上一篇: TypeScript 05:交叉类型、索引签名、元组与 enum
下一篇: TypeScript 07:工程化——import type、声明文件与 tsconfig
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值