【TypeScript】断言

2023-11-18

概念

TypeScript类型断言是一个编译时语法,用于告诉编译器用户比编译器更加确定变量的类型,进而解除编译错误,类型断言有点类似于其他语言的类型转换,但它没有运行时的影响,只是在编译阶段起作用。所以,即使通过类型断言解除了编译错误,也不会影响运行错误。

用法

  1. 使用as

值 as 类型

  1. 使用尖括号

<类型>值

由于<类型>这种用法在TypeScript中除了表示类型断言之外,也可能是表示一个泛型。所以推荐使用第一种方式,避免混淆。

实例

  1. 基本用法
let value: any = "this is a string";
let length: number = (value as string).length;
  1. 将一个联合类型断言为其中一个类型
interface Cat {
    name: string;
    run(): void;
}
interface Fish {
    name: string;
    swim(): void;
}

function getName(animal: Cat | Fish) {
    // 如果不使用断言,则无法访问联合类型的非公共属性。
    if (typeof (animal as Fish).swim === 'function') {
        return true;
    }
    return false;
}
//	需要注意的是,类型断言只能骗过TypeScript 编译器,滥用断言可能会导致运行时错误。
  1. 非空断言

     当我们确认某个值不可能为 undefined 或 null 时,可以在变量后面加上一个 “!”。
    
function fun(value: string | undefined | null) {
  const str: string = value; // 错误 value 可能为 undefined 和 null
  const str1: string = value!; //ok
  const length: number = value.length; // 错误 value 可能为 undefined 和 null
  const length1: number = value!.length; //ok
}
  1. 确定赋值断言
    确定赋值断言即允许在实例属性和变量声明后面放置一个 ! 号,从而告诉编译器该属性一定会被明确的赋值。
let x: number;
initialize();
console.log(2 * x); // 错误,x在赋值之前被调用

function initialize() {
  x = 10;
}

加上断言后,编译错误消失。

let x!: number;
initialize();
console.log(2 * x); // ok

function initialize() {
  x = 10;
}

总结

  • 联合类型可以被断言为其中一个类型
  • 父类可以被断言为子类
  • 任何类型都可以被断言为 any
  • any 可以被断言为任何类型
  • 当我们确认某个值不可能为 undefined 或 null 时,可以在变量后面加上一个 “!”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【TypeScript】断言 的相关文章

随机推荐

  • 启动arbiter失败Oplog entry at { ts: Timestamp 1651735515000

    mongodb版本是 mongodb linux x86 64 3 4 2 tgz 操作系统 中标麒麟服务器版 问题 查看日志 日志里面提示 2022 05 06T14 27 50 862 0800 I REPL initandlisten
  • SUSAN边缘检测算法,及其Matlab和OpenCV实现

    1 SUSAN边缘检测计算步骤 1 在图像上放置一个37个像素的圆形模板 模板在图像上滑动 依次比较模板内各个像素点的灰度与模板核的灰度 判断是否属于USAN区域 判别函数如下 其中 r 0 vec r 0 r
  • 解决移动端shader找不到问题

    在Unity里面 编辑器特效正常 移动端特效无效 adb输出是找不到shader 打开Graphics面板 把找不到的shader添加进去
  • [python] 下载天地图切片地图

    下载xyz地图 资源 下列为常用xyz路由地址 为了避免图片中出现文字标注 道路名称 建筑物名称等 本文选择天地图tian vec 作为获取资源对象 var mapUrl 高德地图 lang可以通过zh cn设置中文 en设置英文 size
  • RNN详解及BPTT详解

    转自 https blog csdn net zhaojc1995 article details 80572098 本文部分参考和摘录了以下文章 在此由衷感谢以下作者的分享 https zhuanlan zhihu com p 28054
  • Android系统system用户权限和root权限的获取

    在Android系统中 系统为每一个应用程序 apk 创建了一个用户和组 这个用户和组都是受限用户 不能访问系统的数据 只能访问自己的文件和目录 当然它也不能访问其他应用程序的数据 这样设计可以尽可能地保护应用程序的私有数据 增强系统的安全
  • 华为校招机试题-寻找链表的中间结点-2023年

    题目描述 给定一个单链表 L 请编写程序输出 L 中间结点保存的数据 如果有两个中间结点 则输出第二个中间结点保存的数据 例如 给定 L 为 1 7 5 则输出应该为 7 给定 L 为 1 2 3 4 则输出应该为 3 输入描述 每个输入包
  • echart - 圆角环形图 -模板

    一 最近遇到圆角环形图的需求 搞了半天 才找到一个合适的模板 在这里就分享给大家 希望对有需求的小伙伴有所帮助 废话不多说 先贴效果图 然后再贴源码 tip 大家记得要引入一下echart js的文件啊 这样才可以显示出来 路径记得找的要对
  • QT QLabel样式设置

    需要设置error的样式 设置样式 color rgb 255 0 0 font size 12pt font family Microsoft YaHei 字体 颜色也可通过富文本设置在程序中设置 emit LoginError QStr
  • 一文带你了解如何编写自动化测试用例

    自动化测试脚本 什么是自动化测试 自动化测试是验证和验证软件是否满足所有用户需求 并使用自动化工具按预期运行 它检查在产品开发阶段期间和之后出现的错误 问题和其他类型的缺陷 这种类型的软件测试运行在由测试工具处理的编程脚本上 有多种测试工具
  • 关于rider引入使用nuget无法加载包的解决方式

    关于rider引入使用nuget无法加载包的解决方式 这个问题已经是困扰我三天了 因为C 使用rider开发的人相对较少 也可能是我自身遇到这个问题比较特殊 终于找到了nuget无法引入包的解决方案 首先看图 我在Nuget下面查找Nuni
  • 蓝桥杯基础练习VIP——矩阵乘法——快速幂

    题目https www dotcpp com oj problem1472 html 1 普通做法 循环嵌套 n m list map int input split mat for i in range n row list map in
  • uniapp 仿网易云音乐播放器 微信小程序

    效果视频 uniapp 仿照网易云播放器功能 效果截图 上代码
  • pxe无盘服务器教程,[教程]Synology+PXE挂载iSCSI网络无盘启动Win7(08.04更新)

    本帖最后由 shuaiking 于 2020 5 16 09 32 编辑 前言 之前发了一篇关于 synology部署无盘win7的帖子https www chiphell com thread 823492 1 1 html 教程本想找个
  • Android Studio 从安装到第一个Android 应用Demo

    安装Android Studio 安装需要 上网 我这挺顺利的 就是在官网下载安装包 一路 Next 大概连下载总共半个小时 第一个应用 参考官方教程 https developer android com codelabs basic a
  • 智能指针的deleter机制

    一 介绍 智能指针的deleter机制是指 当智能指针的引用计数降为0时 智能指针会自动调用一个指定的析构函数 deleter 来释放所管理的内存 这个析构函数通常是一个函数对象 可以是一个函数指针 一个lambda表达式或者一个重载了函数
  • 基于模型的六轴机器人阻抗力控制算法(matlab simscape,机器人模型可换)

    基于模型的六轴机器人阻抗力控制算法 matlab simscape 机器人模型可换 视频中红色为期望轨迹 黑色为实际轨迹 工程可一键运行 可学到机器人阻抗力控制算法以及通过m文件设置simulink参数及调用simulink的方法 ID 4
  • FutureWarning: Criterion ‘mse‘ was deprecated in v1.0 and will be removed in version 1.2.

    出现FutureWarning Criterion mse was deprecated in v1 0 and will be removed in version 1 2 Use criterion squared error whic
  • c++如何按照空格分割字符串

    我们经常会需要在txt文本或csv中提取字符串 例如 调用了一次readline 之后 我们得到了如下一行string id 1 name 345 size 728 632 value 3 1415926 我们想把这行字符串按照空格进行分割
  • 【TypeScript】断言

    目录 概念 用法 实例 总结 概念 TypeScript类型断言是一个编译时语法 用于告诉编译器用户比编译器更加确定变量的类型 进而解除编译错误 类型断言有点类似于其他语言的类型转换 但它没有运行时的影响 只是在编译阶段起作用 所以 即使通