TypeScript基础知识:类型推导和上下文类型化

        在 TypeScript 中,类型推导和上下文类型化是两个重要的概念。它们使得代码编写更加简洁、可读性更高,并且帮助我们避免冗余的类型注解。本文将深入探讨这两个概念,并通过示例代码演示它们的用法和好处。

一、类型推导

        类型推导是 TypeScript 的一个强大特性,它能够根据变量的值自动推断出其类型。这样一来,我们无需显式地为每个变量添加类型注解,而是让 TypeScript 根据上下文自动推导出最合适的类型。

let num = 10; // TypeScript 推断 num 的类型为 number
let message = "Hello, TypeScript!"; // TypeScript 推断 message 的类型为 string
let isActive = true; // TypeScript 推断 isActive 的类型为 boolean// 推导出数组的元素类型
let numbers = [1, 2, 3]; // TypeScript 推断 numbers 的类型为 number[]
let names = ["Alice", "Bob", "Charlie"]; // TypeScript 推断 names 的类型为 string[]

通过类型推导,我们可以省去显式添加类型注解的步骤,使得代码更加简洁和易于维护。

二、上下文类型化

        上下文类型化是指 TypeScript 根据表达式所在的上下文环境来推导出表达式的类型。这种类型推导方式在函数调用、赋值操作和对象字面量等场景中非常有用。

// 函数调用中的上下文类型化
function greet(name: string) {console.log("Hello, " + name.toUpperCase() + "!");
}let username = "Alice";
greet(username); // TypeScript 根据 greet 函数的参数类型推导出 username 的类型为 string// 赋值操作中的上下文类型化
let x = [1, 2, 3];
let y = x; // TypeScript 推断 y 的类型为 number[],与 x 的类型相同// 对象字面量中的上下文类型化
interface Point {x: number;y: number;
}function printPoint(point: Point) {console.log("x:", point.x);console.log("y:", point.y);
}let point = { x: 10, y: 20 };
printPoint(point); // TypeScript 根据 printPoint 函数的参数类型推导出 point 的类型为 Point

通过上下文类型化,我们可以利用已知的上下文信息来推导出更精确的类型,减少不必要的类型注解。

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

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

相关文章

day06_菜单管理(查询菜单,添加菜单,添加子菜单,修改菜单,删除菜单,角色分配菜单,查询菜单,保存菜单,动态菜单)

文章目录 1 菜单管理1.1 表结构介绍1.2 查询菜单1.2.1 需求说明1.2.2 页面制作1.2.3 后端接口SysMenuSysMenuControllerSysMenuServiceMenuHelperSysMenuMapperSysMenuMapper.xml 1.2.4 前端对接sysMenu.jssysMenu.vue 1.3 添加菜单1.3.1 需求说明1.3.3 页面制作1.3.3 后端接口…

【git随笔,日常积累】

Git常用基础 branch 查看所有分支: git branch -a切换到分支:git checkout develop创建分支并切换到:git checkout -b develop创建一个新分支:git checkout --orphan new_branch --orphan 选项用于创建一个没有历史记录的分支 删…

腾讯云安装MYSQL远程连接不上解决方案

推荐安装步骤博客,写的很详细,如果不会安装的话,可以根据安装步骤一直走。 Windows10下超详细Mysql安装_win10安装mysql-CSDN博客 修改 my.cnf或者my.ini 找到里面bind-address将bind-address 127.0.0.1设置成bind-address 0.0.0.0&#x…

AI英语学习助手-帮助建立词库和句子-极简安装(python基于Django和 OpenAI GPT API的网站程序)

AI英语学习助手-帮助建立词库和句子-极简安装(python基于Django和 OpenAI GPT API的网站程序) 学了很久的英语,但是发现还是被单词困住了,天天查句子查单词太麻烦,现在有了Chat GPT,能够很好得帮助学习英语…

CSP-202109-2-非零段划分

CSP-202109-2-非零段划分 【70分思路-暴力枚举】 这段代码的目的是在给定一个由自然数(非负整数)组成的数组后,通过选择一个适当的正整数 p,将数组中所有小于 p 的数变为 0,从而使得数组中非零段的数量达到最大。这里…

使用 gma 绘制隋唐洛阳城

背景 最近河南文旅大伙,给家乡带了一波热度,想想又是王子又是公主,着实羡慕。出门在外,还是对加很有感觉得,不过很遗憾,本人不能为家乡做出贡献,只能使用这种小伎俩,稍稍展示&#…

【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器

目录 一、网络编程 二、客户端和服务器 三、客户端和服务器的交互模式 四、TCP 和 UDP UDP socket api 的使用 1、DatagramSoket 2、DatagramPacket TCP socket api 的使用 1、ServerSocket 2、Socket 一、网络编程 本质上就是学习传输层给应用层提供的 api&#x…

Leetcode 128. 最长连续序列

最长连续序列 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入:nums [100,4,200,1,3,2] 输出&am…

ARM简介

ARM:ARM是Advanced RISC Machine的缩写,意为高级精简指令集计算机。 英国ARM公司,2016年被软银创始人孙正义斥资320亿美元收购了。现在是软银旗下的芯片设计公司,总部位于英国剑桥,专注于设计芯片,卖芯片生…

揭秘:头部房企如何借助数据分析实现稳健发展?

房地产行业是我国国民经济中的重要支柱产业之一,在房地产市场供求关系发生重大变化的当下,房企面临多重挑战。Kyligence 服务的这家头部房企把发展的重点聚焦于内生,关注内生的转化率、接管的效率以及内生毛利率的提升,引入 Kylig…

基于springboot实现保险信息网站系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现保险信息网站系统演示 摘要 随着互联网的不断发展,现在人们获取最新资讯的主要途径来源于网上新闻,当下的网上信息宣传门户网站的发展十分的迅速。而保险产品,作为当下人们非常关注的一款能够给人们带来医疗、生活、养老或…

面试笔记系列七之多线程+分布式系统基础知识点整理及常见面试题

目录 多线程 介绍一下线程的生命周期及状态? 线程的sleep、wait、join、yield如何使用? sleep与yield方法的区别在于, 进程调度算法 创建线程有哪些方式? 什么是守护线程? ThreadLocal的原理是什么,…

当大语言模型遇到AI绘画-google gemma与stable diffusion webui融合方法-矿卡40hx的AI一体机

你有想过建一台主机,又能AI聊天又能AI绘画,还可以直接把聊天内容直接画出来的机器吗? 当Google最新的大语言模型Gemma碰到stable diffusion webui会怎么样? 首先我们安装stable diffusion webui(automatic1111开源项目&#xff…

微信小程序构建npm失败解决方式

安装完所需要的依赖后,在微信开发者工具菜单栏中选择:“工具” -> “构建 npm”,但是失败。 解决方法:修改 project.config.json 开发者工具创建的项目,miniprogramRoot 默认为 miniprogram,package.js…

数据迁移DTS | 云上MySQL 数据库迁移至达梦数据库

引入 云上 MySQL 数据库 —> 向达梦国产化数据库迁移 下载&安装 达梦客户端工具 DM->可参考之前国产化专栏达梦文章 创建模式 在客户端分别依次执行以下命令脚本(这里没有通过客户端管理工具去创建达梦数据库的模式,当然也可以通过图形化界…

WordPress通过宝塔面板的入门安装教程【保姆级】

WordPress安装教程【保姆级】【宝塔面板】 前言一:安装环境二:提前准备三:域名解析四:开始安装五:安装成功 前言 此教程适合新手,即使不懂代码,也可轻松安装wordpress 一:安装环…

node如何解析前端传递过来的命令行字符串

node如何解析前端传递过来的命令行字符串 在Node.js中,如果你想处理从前端传递过来的命令行字符串,你可以根据你的应用程序的架构来决定如何接收这些字符串,然后进行解析。一般来说,命令行字符串可能会通过HTTP请求(如…

视频在线转换,四种方法任你选!(建议收藏)

在当今的数字时代,视频已经成为人们日常生活中不可或缺的一部分。我们通过视频分享知识、表达创造力、观看娱乐节目,甚至参与远程学习和工作。然而,随着视频格式的多样化和设备的激增,我们经常会遇到一个常见的问题:视…

Linux(CentOS)学习

一、认识Linux 1、如何修改Linux时区 2、配置固定IP 3、重启网络服务 3、小技巧快捷键 4、环境变量设置 5、Linux文件的上传和下载 6、压缩和解压 二、基础命令 1、目录命令 (1、)查看目录内容(ls) 1、ls //查看当前目录内容 2、- a //显示隐藏内容 3…

深入理解Lucene:开源全文搜索引擎的核心技术解析

1. 介绍 Lucene是什么? Lucene是一个开源的全文搜索引擎库,提供了强大的文本搜索和检索功能。它由Apache软件基金会维护和开发,采用Java语言编写,因其高性能、可扩展性和灵活性而备受欢迎。 Lucene的作用和应用场景 Lucene主要…