【TypeScript】类型断言-类型的声明和转换(五)

这篇具有很好参考价值的文章主要介绍了【TypeScript】类型断言-类型的声明和转换(五)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


【TypeScript】类型断言(五)



【TypeScript】类型断言-类型的声明和转换(五),TypeScript实践应用,typescript,javascript,前端

一、简介

TypeScript 断言是指在编写代码时,开发者能够告诉编译器某个值的具体类型,从而可以在编译阶段强制类型检查。

这其实在某些强类型语言中,类似于强制类型转换的操作。

类型断言有两种形式实现:

  • 尖括号语法
  • as语法
二、断言形式
2.1 尖括号语法

尖括号语法:开发者可以使用 <类型> 的方式指定某个值的类型,例如:

注意: 有些小伙伴在演练场使用的时候,会提示错误信息,是因为JSX语法冲突,可以在编辑器中通过创建 tsxts 文件来练习。

let sayHi: any = "hello world";
let hiLength1: number = (<string>sayHi).length;

let hiLength2: number = (<number>sayHi).length; // error

sayHi是any类型,在使用时候将其断言为 string 类型,则不会有错误提示。然后当我们断言为 number ,则会有错误警告。

【TypeScript】类型断言-类型的声明和转换(五),TypeScript实践应用,typescript,javascript,前端

继续执行接下来的操作。


let sayHi:string | number = 'good good';
let hiLength:number = (<string>sayHi).length;  //0

sayHi是string或者number的联合类型,在使用时候将其断言为string类型。

2.2 as形式

as类型断言语法: 值a as 类型A 的语法进行类型断言,将 值a 断言为 类型A.

例如:


let sayHi: string | number = 'good good';
let hiLength1: number = (sayHi as string).length;

let hiLength2: number = (sayHi as number).length;  // error

对于sayHi同样的进行断言为string和number,结果和尖括号语法断言一致。

使用断言的优势是可以在编译阶段捕获一些潜在的类型错误,从而提高代码的可靠性。不过需要注意,过度使用断言会导致代码的可读性和可维护性降低,因此需要谨慎使用

as形式 的断言在实际开发中比较推荐。

三、其他断言类型
3.1 非空断言

TypeScript还有一个特殊的语法,用于在不进行任何显式检查的情况下从类型中删除 nullundefined。使用 ! 写在需要断言的表达式或者值之后:

function setName(name: string | null | undefined) : void {
    if (name.length) {
        console.log('name', name)
    }
}

【TypeScript】类型断言-类型的声明和转换(五),TypeScript实践应用,typescript,javascript,前端

从编译结果我们能够看出,name可能为null或者undefined,我们进行非空断言处理,修改调用方式为 name!.length

function setName(name: string | null | undefined) : void {
    if (name!.length) {
        console.log('name', name)
    }
}

现在,在编译时就不会报错了。但是还是需要注意,当在运行时,真正的传入了null或者undefined时,则会出现异常。请务必注意。

3.2 确定赋值断言

在开发中还有这样一种情况, 就是我们在初始定义某一个变量的时候, 有可能是不赋值的,在后面的代码或者函数内对其进行赋值, 然后再使用。

TypeScript允许在实例属性或者变量声明后面放置 ! 号,从而告诉 TypeScript 该属性会被明确地赋值。

// 初始化的时候不进行赋值
let n: number

// 通过调用这个函数对 n 进行赋值操作
function init () { n = 100 }
init()

// 这里使用一下 n
console.log(n.toFixed(2))

【TypeScript】类型断言-类型的声明和转换(五),TypeScript实践应用,typescript,javascript,前端

为了避免编译出错,我们可以在变量名后面加个!符号.

// 初始化的时候不进行赋值
let n!: number

// 通过调用这个函数对 n 进行赋值操作
function init () { n = 100 }
init()

// 这里使用一下 n
console.log(n.toFixed(2))

此时,再去执行编译,则不会出现定义前使用的错误提示了。

四、断言使用需谨慎

需要注意的是,使用断言虽然能避免编译中的TypeScript的报错,但是却避免不了运行中实际真实的报错,因此,除非你真的知道你在做什么,否则不需要轻易使用断言。

如下面代码:

type Score = number | string;

function updateScore(scoreValue:Score): string {
   return (scoreValue as string).toUpperCase()
}

updateScore(1)

可以看到在编辑器中并没有报错,但熟悉代码的效果伴一眼就能看看出这是有问题的代码。
打开控制台或编辑器运行这段代码,显示出错

【TypeScript】类型断言-类型的声明和转换(五),TypeScript实践应用,typescript,javascript,前端

所以除非确切的知道变量的数据类型,否则不要轻易使用类型断言,这是因为类型断言会让 TypeScript 编译器 将变量当做指定的类型,而不管它实际的类型,在程序实际运行时可能有JavaScript语法错误,因此使用断言需要额外注意



以上就是【TypeScript】类型断言的总结,如果对你有帮助,请不要吝啬你的小手给我狠狠的点赞、关注加分享。文章来源地址https://www.toymoban.com/news/detail-644976.html



到了这里,关于【TypeScript】类型断言-类型的声明和转换(五)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TypeScript -类型断言的简单理解

    类型断言 : 是手动的给某个变量 指定类型,从而可以方便操作该类型的属性和方法。 方式一 : 变量名 as 类型 方式二 :类型 变量名 注意 : 1、类型断言只是为了方便明确变量的类型,而不是将变量的类型进行改变!!! 2、因此,类型断言在使用的时候,建议 在我们已

    2024年02月08日
    浏览(41)
  • TypeScript基础知识:类型断言

            在 TypeScript 中,类型断言是一种强制将一个值视为特定类型的方式。它允许开发人员在编译时指定变量的类型,从而获得更好的类型检查和代码提示。本文将深入探讨 TypeScript 中的类型断言,并提供丰富的示例代码帮助读者更好地理解和应用这一特性。       

    2024年01月25日
    浏览(44)
  • TypeScript 学习笔记(一):基本类型、交叉类型、联合类型、类型断言

    TS中实现对象属性必选、对象属性在开发过程中十分常见,前端在传参数时,有些参数比必传,有些是选传,我们可以定一个多个对象来实现传参,但是这让代码变得冗余。我们可以通过TS定义数据类型来实现。 TypeScript中文网 1. 数组 2. 布尔 3. 数值 当我们给num赋值为123但没有

    2024年02月15日
    浏览(45)
  • 【TypeScript】TS类型声明(二)

    🐱个人主页: 不叫猫先生 🙋‍♂️作者简介:前端领域新星创作者、华为云享专家、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫系列专栏:vue3从入门到精通、TypeScript从入门到实践 📝个人签名:不破不立 TypeScript从入门到实践专栏 是博

    2024年01月20日
    浏览(43)
  • typeScript中的类型断言和类型别名、字符串字面量类型

    目录 1.类型断言 语法  2.类型断言的用途 2.1 将一个联合类型断言为其中一个类型   2.2 将一个父类断言为更加具体的子类  2.3 将任何一个类型断言为 any 2.4 将 any 断言为一个具体的类型 类型断言的限制 双重断言 类型断言 vs 类型转换 类型断言 vs 类型声明 类型断言 vs

    2024年02月04日
    浏览(38)
  • TypeScript中的类型声明declare

    在 TypeScript 中, declare 用于定义 全局 变量、函数和类型等 ,提供了一种在编译过程中告诉TypeScript编译器某个标识符的类型的方式。它告诉编译器:虽然它在当前文件中没有声明,但它在其他地方已经存在了。也就是说,declare让 编译器 知道 这些声明的实体是在编译

    2024年02月12日
    浏览(48)
  • TypeScript 中的常用类型声明大全

    上一章节,我们介绍了什么是TS,以及TS的应用场景。本章节将给大家介绍,在TypeScript 中,常用的数据类型声明,有我们熟悉的 基本数据类型,也有,一些TypeScript 新增的一些,语法规范类型。出发吧… 函数:同样的,也可以给函数限制 接受形参的类型和,限制返回值的数

    2024年02月16日
    浏览(38)
  • 前端TypeScript学习day05-索引签名、映射与类型声明文件

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)              目录 索引签名类型  映射类型 索引查询(访问)类型 基本使用  同时查询多个索引的类型  TypeScript 类型声明文件  概述 TS 的两种文件类型  类型声明文件的

    2024年02月08日
    浏览(48)
  • TypeScript入门指南:特性、安装配置、类型声明、编译选项、面向对象等详解

    了解TypeScript的特性、安装配置步骤、类型声明方式、编译选项及面向对象编程方法。适合初学者学习和实践。

    2024年02月12日
    浏览(50)
  • 【TypeScript】TS中type和interface在类型声明时的区别

    🐱 个人主页: 不叫猫先生 🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫优质专栏: vue3+vite+typeScript从入门到实践 📢 资料领取:前端进阶资料可以找我免费领取 🔥

    2023年04月26日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包