typescript字面量类型

news2024/12/28 4:09:55

typescript 字面量介绍

在TypeScript中,字面量是指在代码中直接使用的具体值,如字符串、数字、布尔值等。字面量类型是TypeScript中的一种特殊类型,它用于定义一组有限的值,并且可以在定义变量或函数时使用字面量作为具体值,也可以作为类型的一部分限定变量或函数的取值范围。

示例如下

let str1 = 'hello world'
const str2 = 'hello world'

在这里插入图片描述
上面的代码通过ts类型推论机制,我们可以看到,两个变量类型是不同的

  1. str1的变量类型是:string
  2. str2的变量类型是:‘hello world’

这是因为str1是一个变量,(let)可以是任意的string类型数据,额,可以是任意类型字符串,所以变量类型是string
而str2是一个常量(const) 它的值不能发生变化,所以只能是’hello world’,所以它的类型为’hello world’

也就是说,此处的’hello world’就是一个字面量类型,
某个特定的字符串可以作为ts中的类型, 如下

let str1 = 'hello world'
const str2 = 'hello world'
//将hello world作为类型
let str3: 'hello world' = 'hello world'

当然,除了字符串外,任意的js字面量都能当作类型使用

let str1 = 'hello world'
const str2 = 'hello world'

let str3: 'hello world' = 'hello world'

let age: 18 = 18
let isChild: [1, 2] = [1, 2]

搭配联合类型使用

在 TypeScript 中,联合类型(Union Types)是一种特殊的数据类型,它允许一个值具有多种类型中的一种。字面量(Literal)则是表示固定值的语法。可以通过字面量搭配联合类型来定义一个变量,使其只能具有指定的值之一。

示例如下

// 定义一个类型为 "apple" | "banana" 的字面量  
type Fruit = "apple" | "banana";  
  
// 定义一个变量,其类型为 Fruit,并赋值为 "apple"  
let myFruit: Fruit = "apple";  
  
// 试图将变量赋值为非法值,将会导致编译错误  
// myFruit = "orange"; // Type '"orange"' is not assignable to type 'Fruit'  
  
// 可以使用 switch 语句来进行类型检查  
function checkFruit(fruit: Fruit) {  
  switch (fruit) {  
    case "apple":  
      console.log("It's an apple.");  
      break;  
    case "banana":  
      console.log("It's a banana.");  
      break;  
    // 如果没有匹配的值,将会导致编译错误  
    // default: // This condition will never be met. Its type 'never' is not assignable to type 'Fruit'  
  }  
}  
  
checkFruit(myFruit); // 输出 "It's an apple."

当然也可以为函数的参数限定值,比如,如果是一个游戏人行走的函数,那么这个函数应该只接收上下左右四个类型的参数
示例如下

首先,需要创建一个联合类型,该类型可以是 “上”、“下”、“左” 或 “右”。在 TypeScript 中,使用 type 关键字来定义类型,然后使用 | 运算符来创建联合类型。

type Direction = "上" | "下" | "左" | "右";

接下来,定义一个函数,该函数接收一个 Direction 类型的参数:

function move(direction: Direction) {  
    switch (direction) {  
        case "上":  
            console.log("角色向上移动");  
            break;  
        case "下":  
            console.log("角色向下移动");  
            break;  
        case "左":  
            console.log("角色向左移动");  
            break;  
        case "右":  
            console.log("角色向右移动");  
            break;  
    }  
}

然后,就可以像这样调用这个函数:

move("上"); // 输出 "角色向上移动"  
move("下"); // 输出 "角色向下移动"  
move("左"); // 输出 "角色向左移动"  
move("右"); // 输出 "角色向右移动"

当试图传递一个不是 “上”、“下”、“左” 或 “右” 的参数给 move 函数,TypeScript 编译器将会抛出一个错误:

move("前"); // 错误:参数不能赋值给 'Direction' 类型

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

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

相关文章

基于Java的养老院管理系统的设计与实现(亮点:多角色、登录验证码、留言反馈)

养老院管理系统 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序(小蔡coding)2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 主要功能描述 五、系统实现5.1 养老院…

【基础篇】四、SpringBoot整合第三方技术

文章目录 1、SpringBoot整合Junit2、SpringBoot整合MyBatis3、SpringBoot整合MyBatisPlus4、SpringBoot整合Druid 1、SpringBoot整合Junit 步骤: 导入测试对应的starter测试类使用SpringBootTest修饰使用自动装配的形式添加要测试的对象 SpringBootTest class Spri…

IDEA(2023)解决运行乱码问题

😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:无 &#x1f33c…

Nginx 相关介绍(Nginx是什么?能干嘛?)

Nginx的产生 没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器,基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator…

【算法专题突破】滑动窗口 - 串联所有单词的子串(15)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后: 1. 题目解析 题目链接:30. 串联所有单词的子串 - 力扣(LeetCode) 这道题其实也很好理解,看一下示例就基本知道是什么意思了, 主要就是找 s 里面…

day21算法

常见的七种查找算法: ​ 数据结构是数据存储的方式,算法是数据计算的方式。所以在开发中,算法和数据结构息息相关。今天的讲义中会涉及部分数据结构的专业名词,如果各位铁粉有疑惑,可以先看一下哥们后面录制的数据结构…

Ubuntu不能上网解决办法

问题及现象 Ubuntu的虚拟机(18.04)总是莫名就不能上网了。 使用ifconfig -a 查看,ensxx(xx为虚拟机分配的id号)对应的网卡有mac地址,但是没有分配ip地址。 Network中也没有Wired的选项。 临时解决方案 使…

深入学习 Redis Cluster - 集群缩容(全网最详细)

目录 一、集群缩容 1.1、准备环境 1.2、第一步,删除从节点 1.3、第二步,重新分配 slots 第一次分配:分配给 106 1365 个 slots 第二次分配:分配给102 1365 个 slots 此时查看集群状态,可以看到 110 节点不再持有…

【技术分享】NetLogon于域内提权漏洞(CVE-2020-1472)

一、漏洞介绍 CVE-2020-1472是一个Windows域控中严重的远程权限提升漏洞。攻击者在通过NetLogon(MS-NRPC)协议与AD域控建立安全通道时,可利用该漏洞将AD域控的计算机账号密码置为空,从而控制域控服务器。该漏洞适用于Win2008及后…

C#实现钉钉自定义机器人发送群消息帮助类

一、自定义机器人发送群消息使用场景 在企业中,针对一些关键指标内容(如每天的生产产量、每天的设备报警信息等信息),需要同时给多人分享,此时就可以将需要查看这些数据的人员都拉到一个群中,让群里的机器人将这些关键指标内容推送到群里即可【(目前已实现在钉钉群里创建…

Pytorch-CNN-Mnist

文章目录 model.pymain.py网络设置注意事项及改进运行截图 model.py import torch.nn as nn class CNN_cls(nn.Module):def __init__(self,in_dim28*28):super(CNN_cls,self).__init__()self.conv1 nn.Conv2d(1,32,1,1)self.pool1 nn.MaxPool2d(2,2)self.conv2 nn.Conv2d(3…

2023上半年软件设计师上午题目总结

1 在计算机中系统总线用于连接 主存及外设部件 2 在由高速缓存、主存、硬盘构成的三级存储体系中,CPU执行指令时需要读取数据,DMA控制器和中断CPU发出的数据地址是 主存物理地址 。 DMA(Direct Memory Access)控制器是计算机硬…

Nacos深入原理从源码层面讲解

文章目录 1 Nacos原理1.1 Nacos架构1.2 注册中心原理1.3 SpringCloud服务注册1.4 NacosServiceRegistry实现1.4.1 心跳机制1.4.2 注册原理1.4.3 总结 1.5 服务提供者地址查询1.6 Nacos服务地址动态感知原理 1 Nacos原理 1.1 Nacos架构 Provider APP:服务提供者Cons…

STM32 学习笔记1:STM32简介

1 概述 STM32,从字面上来理解,ST 是意法半导体,M 是 Microelectronics 的缩写,32 表示 32 位,合起来理解,STM32 就是 ST 公司开发的 32 位微控制器。是一款基于 ARM 公司推出的基于 ARMv7 架构的 32 位 Co…

【详细教程hexo博客搭建】1、从零开始搭建一个能用的博客

1、开始 2.环境与工具准备 本教程主要面对的是Windows用户 操作系统:Windows10NodeGitHexo文本编辑器(强烈推荐VSCODE)GitHub 帐号一个域名(强烈推荐买个域名)云服务器(可选) 3.Node的安装 打开Node官网&#xff0…

vivo数据中心网络链路质量监测的探索实践

作者:vivo 互联网服务器团队- Wang Shimin 网络质量监测中心是一个用于数据中心网络延迟测量和分析的大型系统。通过部署在服务器上的Agent发起5次ICMP Ping以获取端到端之间的网络延迟和丢包率并推送到存储与分析模块进行聚合和分析与存储。控制器负责分发PingList…

【大数据】Neo4j 图数据库使用详解

目录 一、图数据库介绍 1.1 什么是图数据库 1.2 为什么需要图数据库 1.3 图数据库应用领域 二、图数据库Neo4j简介 2.1 Neo4j特性 2.2 Neo4j优点 三、Neo4j数据模型 3.1 图论基础 3.2 属性图模型 3.3 Neo4j的构建元素 3.3.1 节点 3.3.2 属性 3.3.3 关系 3.3.4 标…

JS生成器的介绍

1、 什么是生成器 生成器是ES6中新增的一种函数控制、使用的方案,它可以让我们更加灵活的控制函数什么时候继续执行、暂停执行等。 平时我们会编写很多的函数,这些函数终止的条件通常是返回值或者发生了异常。 生成器函数也是一个函数,但是…

阿里云无影云电脑是干什么用的?五大使用场景

阿里云无影云电脑是一种易用、安全、高效的云上桌面服务,阿里云无影云电脑可用于高数据安全管控、高性能计算等要求的金融、设计、视频、教育等领域,适用于多种办公场景,如远程办公、多分支机构、安全OA、短期使用、专业制图等。阿里云百科来…

【LeetCode热题100】--49.字母异位词分组

49.字母异位词分组 两个字符串互为字母异位词,当且仅当两个字符串包含的字母相同。同一组字母异位词中的字符串具备相同点,可以使用相同点作为一组字母异位词的标志,使用哈希表存储每一组字母异位词,哈希表的键为一组字母异位词的…