返回顶部
首页 > 资讯 > 前端开发 > JavaScript >TypeScript语法详解之类型操作的补充
  • 387
分享到

TypeScript语法详解之类型操作的补充

2024-04-02 19:04:59 387人浏览 安东尼
摘要

目录类型操作的补充类型断言的使用非空类型的断言可选链使用介绍两个特殊操作符字面量类型介绍字面量推理介绍总结类型操作的补充 类型断言的使用 有时候TypeScript无法获取具体的类型

类型操作的补充

类型断言的使用

有时候TypeScript无法获取具体的类型信息,这个我们需要使用类型断言( Type Assertions)

比如我们在操作DOM的时候, 通过 document.getElementById 获取元素, typescript只知道该函数会返回htmlElement ,但并不知道它具体的类型, 是无法得知具体是img还是div等等:

当我们加上类型断言后, TypeScript就可以得知具体的类型信息

const el = document.getElementById("app") as HTMLImageElement

el.src = "图片地址"

TypeScript只允许类型断言转换为 更具体 或者 不太具体(指的是any和unknown)的类型版本,此规则可防止不可能的强制转换

如下直接转是会报错的

我们可以先将message转为any或者unknown, 再转为number, 但是不推荐这样做

const message = "Hello World"
const num: number = (message as any) as number

非空类型的断言

当我们编写下面的代码时,在执行ts的编译阶段会报错

这是因为传入的message有可能是为undefined的,这个时候是不能执行方法的;

// 参数为可选类型的时候
function printMessage(message?: string) {
  console.log(message.toUpperCase())
}

printMessage("aaa")

我们确定上面代码传入的参数是有值的, 但是编译还是不通过,这个时候我们可以使用非空类型断言

非空断言使用的是 ! ,表示可以确定某个标识符是有值的,跳过ts在编译阶段对它的检测, 虽然逃过了编译阶段的检查, 但是代码依然是不严谨的;

function printMessage(message?: string) {
  // 加上 ! 代表着保证这个message一定是有值的
  console.log(message!.toUpperCase())
}

printMessage("aaa")

可选链使用介绍

可选链事实上并不是TypeScript独有的特性,它是ES11( ES2020)中增加的特性

可选链使用可选链操作符 ?.;

它的作用是当对象的属性不存在时,会短路表达式后面就不会执行,直接返回undefined,如果存在,那么才会继续执行;

虽然可选链操作是ECMAScript提出的特性,但是和TypeScript一起使用更版本;

例如我们定义如下一个对象

type Person = {
  name: string
  friend?: {
    name: string
    age?: number
  }
}

const info: Person = {
  name: "chenyq"
}

当我们在其他地方获取对象的属性时, 意味着name属性是一定可以获取到的, 而friend属性有可能是获取不到的

console.log(info.name)
// 表示friend有值的情况下再取name或者age, 没有值就是undefined, 代码不会报错
console.log(info.friend?.name)
console.log(info.friend?.age)

两个特殊操作符

有时候我们还会看到 !! 和 ?? 操作符,这些都是做什么的呢?

!! 和 ?? 操作符, 这本身也是javascript的特性, 并不是TypeScript的语法

!!操作符

将一个其他类型转换成boolean类型;

类似于Boolean(变量)的方式;

例如我们想要将message转为boolean类型再赋值给flag, 我们有两种方式

const message = "Hello World"

// 方式一: 通过Boolean(变量)的方式
let flag1 = Boolean(message)
console.log(flag1) // true

// 方式二: 通过 !! 操作符
let flag2 = !!message 
console.log(flag2)

??操作符

它是ES11增加的新特性;

空值合并操作符( ??)是一个逻辑操作符,当操作符的左侧是 null 或者 undefined 时,返回其右侧操作数, 否则返回左侧操作数;

let message: string|null = null

// 当message没有值时, 将??操作符右边的默认值赋值给content
// 当message有值时, 将message的值赋值给content
const content = message ?? "我是默认值"
console.log(content) // 我是默认值

字面量类型介绍

除了前面我们所讲过的类型之外,也可以使用字面量类型( literal types):

字面量类型必须和它的值是保持一致的

// "Hello World"是可以作为类型的, 这个就叫字面量类型
let message: "Hello World" = "Hello World"
let num: 123 = 123

// 不能是其他的值
// message = "Hello"

那么这样做有什么意义呢?

默认情况下这么做是确实是没有意义的;

但是我们可以让多个字面量类型 结合 联合类型在一起, 就有了意义

// 例如我们用一个变量来保存对齐方式
let align: "left" | "right" | "center" = "left"

align = "right"
align = "center"

字面量推理介绍

我们来看下面的代码:

由于我们的对象再进行字面量推理的时候,options其实是一个 {url: string, method: string},而request的methods是字面量类型Method, 所以我们没办法将 一个 string 类型的值赋值给一个字面量类型, 因此编译阶段就会报错。

方式一: 当我们确定options对象的method没有写错的话, 我们可以使用类型断言(将宽泛的类型转为具体的类型), 如下:

// 使用类型断言
request(options.url, options.methods as Method)

方式二: 看起来有点奇怪, 但是是官方文档中提到的, 给对象添加as const

const options = {
  url: "Http://aaa.org",
  methods: "POST"
} as const 

总结

到此这篇关于TypeScript语法详解之类型操作补充的文章就介绍到这了,更多相关TypeScript类型操作的补充内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: TypeScript语法详解之类型操作的补充

本文链接: https://lsjlt.com/news/165990.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • TypeScript语法详解之类型操作的补充
    目录类型操作的补充类型断言的使用非空类型的断言可选链使用介绍两个特殊操作符字面量类型介绍字面量推理介绍总结类型操作的补充 类型断言的使用 有时候TypeScript无法获取具体的类型...
    99+
    2024-04-02
  • TypeScript基本类型之typeof和keyof详解
    目录编译并运行 TS 代码TypeScript基础数组类型   []联合类型  |类型别名函数类型 void类型可选参数 参数默认值=&nbs...
    99+
    2023-05-14
    ts中的typeof ts基本类型typeof ts基本类型keyof
  • mysql语法之DQL操作详解
    目录简单查询运算符查询排序查询聚合查询分组查询分页查询一张表查询结果插入到另一张表SQL语句分析DQL小练习1DQL小练习2正则表达式总结DQL(Data Query Languag...
    99+
    2024-04-02
  • 详解TypeScript的基础类型
    目录布尔类型数字类型字符串类型字符串和数字进行拼接undefined和 null数组类型元组类型枚举类型any类型void类型联合类型总结布尔类型 // 布尔类型--->boo...
    99+
    2024-04-02
  • 使用TypeScript类型注解的方法详解
    目录类型注解类型推导TS和JS共有的数据类型TS独有的数据类型anyunknownvoidnevertuple函数参数和返回值类型断言非空类型断言字面量类型缩小总结类型注解 Type...
    99+
    2024-04-02
  • 详解TypeScript中的类型保护
    目录概述类型断言in语法instanceof 语法typeof 语法总结概述 在 TypeScript 中使用联合类型时,往往会碰到这种尴尬的情况: interface Bird...
    99+
    2024-04-02
  • TypeScript中的类型断言[as语法|<>语法]的使用
    Typescript中类型断言官方解释 要理解好类型断言,其实就深刻理解一句话:你会比TypeScript更了解某个值的详细信息 。 类型断言,断言 断言,顾名思义,我断定怎么怎么样...
    99+
    2024-04-02
  • Go语言操作Excel利器之excelize类库详解
    目录前言Excelize简介安装导出 Excel 文档读取Excel文档小结前言 在开发中一些需求需要通过程序操作excel文档,例如导出excel、导入excel、向excel文档...
    99+
    2024-04-02
  • 详解C语言之操作符
    目录1.加减乘2.除(/)注意:3.取余(%)注意:4.移位操作符(>> <<)注意5.位操作符(| ,& ,^)6.逻辑操作符(&&...
    99+
    2024-04-02
  • GO语言基本类型String和Slice,Map操作详解
    目录本文大纲1、字符串StringString常用操作:获取长度和遍历字符串的strings包字符串的strconv包:2、切片Slice3、集合Map本文大纲 本文继续学习GO语言...
    99+
    2024-04-02
  • Python实现操作Redis所有类型的方法详解
    目录Redis的数据类型字符串(String)哈希(Hash)列表(List)集合(Set)有序集合(Sorted Set)Redis的高级用法事务发布订阅当今互联网时代,数据处理已经成为了一个非常重要的任务。而Redi...
    99+
    2023-04-19
    Python操作Redis所有类型 Python操作Redis Python Redis
  • Go语言之嵌入类型详解
    一、什么是嵌入类型 先看如下代码: type user struct { name string email string } type admin struct ...
    99+
    2024-04-02
  • pandas的Series类型与基本操作详解
    目录1 Series1.1创造一个serise数据1.2 指定index1.3 用dictionary构造一个series1.4 用numpy ndarray构造一个Series1....
    99+
    2024-04-02
  • TypeScript的类型指令单行注释详解
    目录正文@ts-ignore 和 @ts-expect-error@ts-check 和 @ts-nocheck正文 单行注释应该在项目里用的很少吧, 我没见过在项目中使用过, 但是...
    99+
    2024-04-02
  • TypeScript的条件类型使用示例详解
    目录TypeScript 的条件类型使用方式条件类型和 keyof 组合在条件返回中使用 T在类型输出中使用 T 时的联合类型使用条件类型推断类型总结TypeScript 的条件类型...
    99+
    2024-04-02
  • TypeScript中的类型断言语法怎么使用
    这篇文章主要介绍“TypeScript中的类型断言语法怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“TypeScript中的类型断言语法怎么使用”文章能帮助大家解决问题。Typescript...
    99+
    2023-07-02
  • C++中的强制类型转换操作详解
    目录相关术语C语言中的强制类型转换C++中的强制类型转换static_castdynamic_castreinterpret_castconst_cast注意事项相关术语 强制类型转...
    99+
    2023-05-17
    C++强制类型转换 C++类型转换
  • Go语言学习之文件操作方法详解
    目录引言1. 打开和关闭文件2. 读取文件2.1 defer 语句2.2 手动宕机处理2.3 打开文件并获取内容2.4 bufio 读取文件2.5 ioutil 读取文件2.6 读取...
    99+
    2024-04-02
  • 详解TypeScript映射类型和更好的字面量类型推断
    目录概述使用映射类型构建 Object.freeze()映射类型的语法更直观解释更多映射类型的示例映射类型的实际用例更好的字面量类型推断更好的 const 变量推断更好的只读属性推断...
    99+
    2024-04-02
  • Python基础语法之变量与数据类型详解
    目录一. 输出函数print1.1 可以输出数字1.2 可以输出字符串1.3 可以输出表达式1.4 可以输出至文件中二. 变量与数据类型2.1 整型2.2 浮点型2.3 字符串型2....
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作