TS 入门(三):Typescript函数与对象类型

news2024/12/28 5:16:41

目录

  • 前言
  • 回顾
  • 1. 函数类型
    • a. 基本函数类型
    • b. 可选参数和默认参数
    • c. 剩余参数
  • 2. 对象类型
    • a. 基本对象类型
    • b. 可选属性和只读属性
  • 3. 类型别名和接口
    • a. 类型别名
    • b. 接口扩展
  • 4. 类型推断和上下文类型
    • a. 类型推断
    • b. 上下文类型
  • 扩展知识点:函数重载
  • 结语

前言

在前两章中,我们介绍了 TypeScript 的基础知识,包括安装、配置和基本类型。在本章中,我们将深入探讨函数与对象类型,了解它们的定义与使用,并通过扩展知识点让你有更多的收获。

  • TS 入门(一):TypeScript 简介与安装
  • TS 入门(二):Typescript类型与类型注解

回顾

在上一章中,我们学习了以下内容:

  • 基本类型:包括 numberstringbooleannullundefinedanyunknown
  • 数组和元组类型。
  • 枚举类型。
  • 类型注解的使用示例。

在这里插入图片描述

正文开始如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖


1. 函数类型

a. 基本函数类型

在 TypeScript 中,可以使用函数类型注解来定义函数参数和返回值的类型。

function greet(name: string): string {
  return `Hello, ${name}!`;
}

const message = greet("World");
console.log(message); // 输出: Hello, World!

b. 可选参数和默认参数

可以为函数参数指定默认值或将参数设为可选。

function log(message: string, userId?: string) {
  let time = new Date().toLocaleTimeString();
  console.log(`${time} - ${message}` + (userId ? ` (user: ${userId})` : ""));
}

log("页面加载完毕");
log("用户登录", "张三");

c. 剩余参数

可以使用剩余参数将多个参数收集到一个数组中。

function sum(...values: number[]): number {
  return values.reduce((prev, curr) => prev + curr, 0);
}

console.log(sum(1, 2, 3, 4)); // 输出: 10

2. 对象类型

a. 基本对象类型

对象类型可以用于定义对象的结构。

interface Person {
  name: string;
  age: number;
}

let user: Person = {
  name: "张三",
  age: 30,
};

b. 可选属性和只读属性

在接口中,可以将某些属性定义为可选或只读。

interface Product {
  name: string;
  price: number;
  description?: string; // 可选属性
  readonly id: number; // 只读属性
}

let product: Product = {
  name: "手机",
  price: 4999,
  id: 1,
};

// product.id = 2; // 错误,id 是只读属性

3. 类型别名和接口

a. 类型别名

类型别名用于给一个类型起一个新的名字。

type ID = string | number;

let userId: ID = "12345";
let orderId: ID = 67890;

b. 接口扩展

接口可以继承其他接口,扩展它们的属性。

interface Animal {
  name: string;
}

interface Dog extends Animal {
  breed: string;
}

let myDog: Dog = {
  name: "旺财",
  breed: "拉布拉多",
};

4. 类型推断和上下文类型

a. 类型推断

TypeScript 会根据变量的初始值自动推断其类型。

let numberArray = [1, 2, 3, 4]; // 推断为 number[]

b. 上下文类型

上下文类型发生在 TypeScript 推断某个表达式的类型时。

window.onmousedown = function (mouseEvent) {
  console.log(mouseEvent.button); // 正确
  // console.log(mouseEvent.kangaroo); // 错误,鼠标事件没有 kangaroo 属性
};

扩展知识点:函数重载

TypeScript 允许为同一个函数定义多个函数类型,称为函数重载。

function pickCard(x: { suit: string; card: number }[]): number;
function pickCard(x: number): { suit: string; card: number };
function pickCard(x): any {
  if (typeof x == "object") {
    return Math.floor(Math.random() * x.length);
  } else if (typeof x == "number") {
    return { suit: "黑桃", card: x % 13 };
  }
}

let myDeck = [
  { suit: "红桃", card: 2 },
  { suit: "黑桃", card: 3 },
  { suit: "黄桃", card: 4 },
];
let pickedCard1 = myDeck[pickCard(myDeck)];
let pickedCard2 = pickCard(15);

console.log(`card: ${pickedCard1.card} of ${pickedCard1.suit}`);
console.log(`card: ${pickedCard2.card} of ${pickedCard2.suit}`);

结语

通过本章的学习,你应该对 TypeScript 中的函数类型和对象类型有了更深入的理解,并掌握了类型别名和接口的使用。在下一章中,我们将继续探讨 TypeScript 中的高级类型和类型操作,包括联合类型、交叉类型、字面量类型、类型断言和类型守卫等内容。务必掌握好每个概念,它们将为你后续学习 TypeScript 提供坚实的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1928890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实验06 持续集成测试

知识点 集成测试定义 集成测试是将多个单元组合起来形成更大的单元,并测试它们是否能协同工作形成子系统。一种旨在暴露单元接口之间、组件/系统间交互或协同工作时所存在的缺陷的测试。 集成测试关注的问题 模块间数据传递是否正确。一个模块的功能是否影响另一…

[iOS]内存分区

[iOS]内存分区 文章目录 [iOS]内存分区五大分区栈区堆区全局区常量区代码区验证内存使用注意事项总结 函数栈堆栈溢出栈的作用 参考博客 在iOS中,内存主要分为栈区、堆区、全局区、常量区、代码区五大区域 还记得OC是C的超类 所以C的内存分区也是一样的 iOS系统中&a…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑频率不同响应阶段的惯量评估优化策略》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

嵌入式人工智能(6-树莓派4B按键输入控制LED)

1、按键 按键的原理都是一样,通过按键开关的按下导通,抬起断开的情况,GPIO引脚来检测其是否有电流流入。GPIO有input()方法,对于GPIO引脚检测电流,不能让其引脚悬空,否则引脚会受周边环境电磁干扰产生微弱…

《昇思25天学习打卡营第15天|计算机视觉-SSD目标检测》

FCN图像语义分割&ResNet50迁移学习&ResNet50图像分类&ShuffleNet图像分类&SSD目标检测 SSD目标检测 模型简介 SSD,全称Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一种目标检测算法。使用Nvidia Titan X在VOC 2007测…

重塑水利未来:智慧水利解决方案的探索与实践,从物联网、大数据到人工智能,科技如何赋能水利行业,实现智慧化管理与决策

本文关键词:智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…

达梦数据库的系统视图v$systeminfo

达梦数据库的系统视图v$systeminfo 在达梦数据库(DM Database)中,V$SYSTEMINFO 是一个系统视图,用于显示数据库实例的系统信息。这个视图提供了关于数据库实例的运行状态、配置参数、资源使用情况等重要信息,对于数据…

linux端口,进程管理,主机状态监控

linux端口,进程管理,主机状态监控 一、端口 1、什么是端口?2、端口的划分2、查看端口占用 二、进程 1、什么是进程2、查看进程信息2、关闭进程 三、主机状态监控 1、查看资源占用2、磁盘信息监控3、查看网络情况 四、命令总结 一、端口 1、什么是端口…

【089】基于SpringBoot+Vue+小程序实现的在线点餐小程序

系统介绍 基于SpringBootVue小程序实现的在线点餐小程序 基于SpringBootVue小程序实现的在线点餐小程序采用前后端分离的架构方式,系统分为管理员、员工、用户三种角色,实现了用户点餐、订单生成、模拟支付、菜单管理、账号管理、角色管理、分类管理、菜…

什么是边缘计算技术和边缘计算平台?

随着物联网、5G技术和人工智能的不断发展,数据的规模和种类也在快速增加。在这种背景下,传统的云计算模式面临着一些问题,例如延迟高、网络拥塞等,这些问题限制了数据的处理速度和效率,降低了用户的使用体验。为了解决…

GraphRAG→必然桥梁or过渡折中?

GraphRAG→是未来符号与连接主义的必然桥梁 or AGI深度推理的过渡折中? 随着微软前几天发布开源的GraphRAG,进而又带动了领域GenAI的热潮,借着这股热潮,结合之前自己对LLM复杂推理的思考说一下自己关于LLM与泛RAG的理解延展&#…

DDei在线设计器-数据格式说明

数据格式说明 DDei的所有设计数据都以文件为单位保存在一个JSON对象中。JSON对象包含了全量的页签、舞台、图层、控件的位置以及属性信息。开发人员可以存储这个JSON到服务端数据库中,从而轻易的实现保存功能;也解析这个JSON,将其转换成自己业…

莆田外贸建站公司推荐的商会wordpress主题

垂钓用品wordpress外贸模板 钓鱼佬们用的东西鱼饵、鱼竿、支架、钓箱、渔线轮、鱼竿等垂钓用品wordpress外贸模板。 https://www.jianzhanpress.com/?p3973 户外灯具wordpress外贸站模板 米泡、路灯、地脚地砖灯、草坪灯、太阳能灯、投光灯户外灯具wordpress外贸站模板。 …

GNSS技术干货(34):天灵灵 地灵灵 不如C/N0灵

在GPS接收机研发测试过程中,作为硬件射频工程师最关心的测试项目是传导载噪比C/N0(carrier-to-noise ratio)值,因为它是非常重要的参数指标,可以评估接收机端收到的卫星信号强度,反映硬件射频链路的质量&am…

C语言中的指针:掌握内存的钥匙

C语言中的指针:掌握内存的钥匙 引言 C语言是一种结构化编程语言,它提供了对硬件底层的直接访问,其中最强大的特性之一就是指针。指针允许程序员直接操作内存地址,这对于理解程序的内部工作原理以及优化代码性能至关重要。本文将深…

python如何判断变量是否可迭代

python如何判断变量是否可迭代?方法如下: 方法一: 适用于python2和python3 >>> from collections import Iterable >>> isinstance("str", Iterable) True 方法二: 适用于python3 s "hello …

『 Linux 』命名管道

文章目录 命名管道与匿名管道命名管道特点命名管道的理解命名管道实现两个毫无关联的进程间通信 命名管道与匿名管道 命名管道是管道的一种,数据流向为单向故被称为管道; 与匿名管道相同属于一种内存级文件; 区别如下: 名字 匿名管道 没有名字,只存在于内存当中(类似内核缓冲…

【Visual Studio】Visual Studio使用技巧及报错解决合集

目录 目录 一.概述 二.Visual Studio报错问题及解决方法 三.Visual Studio操作过程中遇到的问题及解决方法 四.Visual Studio编译优化选项 五.Visual Studio快捷键 一.概述 持续更新Visual Studio报错及解决方法,包括Visual Studio报错问题及解决方法、Visua…

mac电脑pdf合并,macpdf合并成一个pdf

在数字化办公和学习的今天,pdf文件因其跨平台兼容性强、格式稳定而成为了最受欢迎的文档格式之一。但随之而来的问题也接踵而至,如何将多个pdf文件合并为一个?这不仅关系到文档的整洁性,更是时间管理的重要环节。今天,…

STM32+TMC2209控制步进电机正反转。

STM32F103ZET6TMC2209控制步进电机正反转 1. 步进电机介绍2 驱动器TMC2209介绍2.1 引脚图及其功能2.2 细分介绍2.3 TMC控制驱动器接法 3 控制器介绍3.1 确定控制引脚3.2 UBEMX配置3.2.1 GPIO配置3.2.2 NVIC配置3.2.3 RCC配置3.2.4 SYS配置3.2.5 USRAT2配置(PS:没用上…