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

目录

  • 前言
  • 回顾
  • 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.mzph.cn/news/872160.shtml

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

相关文章

【银河麒麟操作系统】虚机重启lvs丢失现象分析及处理建议

了解银河麒麟操作系统更多全新产品,请点击访问麒麟软件产品专区:https://product.kylinos.cn 环境及现象描述 40台虚机强制重启后,其中8台虚机找不到逻辑卷导致启动异常,后续通过pvcreate 修复重建pv,激活vg和lv并修复…

大模型基础知识-LoRA与QLoRA

介绍 LoRA 与 QLoRA 1. LoRA (Low-Rank Adaptation) LoRA 是一种用于大规模语言模型 (LLM) 的参数高效微调技术,旨在减少微调大模型所需的计算资源和存储空间。LoRA 的核心思想是将全量参数更新分解为低秩矩阵的形式,从而显著减少参数数量和计算开销。 …

WSL-Ubuntu20.04训练环境配置

1.YOLOv8训练环境配置 训练环境配置的话就仍然以YOLOv8为例,来说明如何配置深度学习训练环境。这部分内容比较简单,主要是安装miniAnaconda以及安装torch和torchvision. 首先是miniAnaconda的安装(参考官网的教程Miniconda — Anaconda ),执行…

CH552G使用IAP下载

常见下载中的方式ISP,IAP,ICP 参考,CH552G中文手册,参考1 ISP:In System Programing,在系统编程。是常见的,使用软件,先将某个引脚(例如boot)连接到合适的电…

Spring源码注解篇三:深入理解@Component注解

Component及其派生注解的源码 Spring框架作为Java开发中不可或缺的一部分,其依赖注入机制的核心是通过注解来实现的。本文将深入探讨Spring中Component及其派生注解的源码实现,分析Spring如何通过类路径扫描(Classpath Scanning)和…

【笔记】一起齿轮箱的故障和相应的数学模拟实验

1.齿轮箱故障一例 出处:设备的故障识别 GearBox的频谱图,原作者不知道是从哪里拷贝来的,待会儿确认一下。 齿轮啮合频率GMF等于齿数乘以齿轮转速频率: ★齿轮啮合频率两边有边频,间距为1X(这是由冲击响应…

JS【实用教程】(2024最新版)

JS 简介 JavaScript 简称 JS,可运行于浏览器 或 node 环境。 JS 的特点 单线程——同一时间只能执行一个任务,多个任务时会排队,后续任务必须等到前一个任务结束才能开始执行。 为什么JavaScript不能有多个线程? 因为作为浏览器脚…

BERT架构的深入解析

BERT(Bidirectional Encoder Representations from Transformers)是由Google在2018年提出的一种基于Transformer架构的预训练模型,迅速成为自然语言处理(NLP)领域的一个里程碑。BERT通过双向编码器表示和预训练策略&am…

17-5 向量数据库之野望5 - 使用 Rust 实现矢量数据库

​​​​​​ 与存储标量数据(如整数、字符串等)的传统数据库不同,矢量数据库旨在有效地存储和检索矢量数据——表示多维空间中的点的数值集合。 本文将探讨如何在 Rust 中实现基本的向量数据库。 让我们开始吧!🦀 什么是矢量数据库? 矢量数据库是一种针对存储和查询…

Neo4j数据库相关

Neo4j 使用指南 目录 什么是 Neo4jNeo4j 的特点Neo4j 的使用场景安装 Neo4j 使用 Docker 安装 Neo4j直接安装 Neo4j 启动和访问 Neo4j使用 Cypher 查询语言 创建节点和关系查询节点和关系更新和删除操作 使用 Python 访问 Neo4j 安装 py2neoPython 代码示例 高级功能和扩展 插…

十年笃行,拥抱世界,JumpServer开源堡垒机v4.0正式发布

2024年7月15日,JumpServer开源堡垒机正式发布v4.0版本。在JumpServer开源堡垒机v4.0版本的设计过程中,JumpServer开源项目组继续秉持“内外兼修”的原则,并且开始迈步走向全球化,同时进一步提升用户的使用体验,真正用心…

25_Vision Transformer原理详解

1.1 简介 Vision Transformer (ViT) 是一种将Transformer架构从自然语言处理(NLP)领域扩展到计算机视觉(CV)领域的革命性模型,由Google的研究人员在2020年提出。ViT的核心在于证明了Transformer架构不仅在处理序列数据(如文本)方面非常有效&…

【C++精华铺】12.STL list模拟实现

1.序言 STL (Standard Template Library)是C标准库中的一个重要组件,提供了许多通用的数据结构和算法。其中,STL list是一种带头双向链表容器,可以存储任意类型的元素。 list的特点包括: 双向性:list中的元素可以根据需…

怎样去除视频上的水印和文字,视频水印文本移除教程

在观看和分享视频时,我们经常会遇到带有水印或额外文字的情况。这些标记有时是为了版权保护,有时则是平台的标识,但在某些情况下,它们可能会干扰视频的观赏体验。本文将向你介绍常见的视频水印类型以及如何使用简鹿水印助手去除这…

浅谈安数云智能安全运营管理平台:DCS-SOAR

SOAR(security orchestration,automation and response),由Gartner于2015年提出,最初的含义是安全运营、分析与报告。2017年,Gartner又重新定义了SOAR的能力,包括安全编排、安全自动化和安全响应…

Purple Pi OH在Android11下测试WiFi和LAN的TCP和UDP传输速率

本文适用于在Purple Pi OH在Andriod11下如何测试WiFi和LAN的TCP和UDP传输速率。触觉智能的Purple Pi OH鸿蒙开源主板,是华为Laval官方社区主荐的一款鸿蒙开发主板。 该主板主要针对学生党,极客,工程师,极大降低了开源鸿蒙开发者的…

AI安全系列——[第五空间 2022]AI(持续更新)

最近很长时间没有更新,其实一直在学习AI安全,我原以为学完深度学习之后再学AI安全会更加简单些,但是事实证明理论转实践还是挺困难的,但是请你一定要坚持下去,因为“不是所有的坚持都有结果,但总有一些坚持…

QT简介、安装与运行

QT5.9.0 安装 下载地址:https://download.qt.io/archive/qt/ 安装过程,直接点击下一步,设置勾选如下: 下载VS编译插件地址如下(已安装vs): https://download.qt.io/archive/vsaddin/2.3.2/

【ARMv8/v9 异常模型入门及渐进 9.1 - FIQ 和 IRQ 打开和关闭】

请阅读【ARMv8/v9 ARM64 System Exception】 文章目录 FIQ/IRQ Enable and Disable汇编指令详解功能解释使用场景和注意事项 FIQ/IRQ Enable and Disable 在ARMv8/v9架构中,可以使用下面汇编指令来打开FIQ和 IRQ,代码如下: asm volatile ("msr da…