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并修复…

WSL-Ubuntu20.04训练环境配置

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

CH552G使用IAP下载

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

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

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

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

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

十年笃行,拥抱世界,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架构不仅在处理序列数据(如文本)方面非常有效&…

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

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

浅谈安数云智能安全运营管理平台: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…

敏捷营销在AI智能名片微信小程序中的应用探索

摘要:在数字化转型的浪潮中,企业面临着前所未有的挑战与机遇。AI智能名片微信小程序作为一种创新的营销工具,以其便捷性、智能化和高效性,正逐步成为企业连接客户、推广品牌的新宠。然而,如何在快速变化的市场环境中&a…

docker 安装 onlyoffice

1.文档地址 Installing ONLYOFFICE Docs for Docker on a local server - ONLYOFFICE 2.安装onlyoffice docker run -i -t -d -p 9000:8000 --restartalways -e JWT_ENABLEDfalse onlyoffice/documentserver 如果发现镜像无法下载,可以尝试更换镜像源 {"registry-mir…

flutter实现语言的国际化

目录 前言 一、GetX实现国际化(推荐) 1.安装Getx 2.创建国际化的文件 3.使用国际化字符串 4.配置GetMaterialApp 5.更改语言 6.系统语言 ​编辑 7.原生工程配置 1.iOS工程配 1.打开iOS工程,在Project的info里面添加语言 2.创建String File文件 2.andr…

Milvus 核心设计(5)--- scalar indexwork mechanism

目录 背景 Scalar index 简介 属性过滤 扫描数据段 相似性搜索 返回结果 举例说明 1. 属性过滤 2. 扫描数据段 3. 相似性搜索 实际应用中的考虑 Scalar Index 方式 Auto indexing Inverted indexing 背景 继续Milvus的很细设计,前面主要阐述了Milvu…

从零开始搭建vue框架

流程图 开始 | |-- 2013 年底,尤雨溪开始开发 Vue 框架,最初命名为 Seed,后更名为 Vue | |-- 2013 年 12 月,Vue 0.6.0 版本 | |-- 2014 年 1 月 24 日,Vue 0.8.0 版本发布 | |-- 2014 年 2 月 25 日,…

2024年初级注册安全工程师职业资格考试首次开考!

​2024年初级注册安全工程师考试首次开考(注:该考试由各省人事考试局组织考试)。目前未取得中级注册安全工程师证书的各位同学,可以关注该考试,毕竟初级考证相对较容易,先去考一个。 目前初安开考地区汇总…