返回顶部
首页 > 资讯 > 前端开发 > JavaScript >7个好用的TypeScript新功能
  • 896
分享到

7个好用的TypeScript新功能

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

目录1. 可选链2. 空值合并3. 递归类型别名4. 断言签名5. 为 Promise 提供更好的反馈6. Unicode 标识符7. 增量编译1. 可选链 从 v3.7 可用 这是

1. 可选链

从 v3.7 可用

这是当你尝试访问嵌套数据时的一个痛点,嵌套数据越多,代码就会变得越繁琐。

在下面的例子中,要访问address,你必须遍历data.customer.address,而且data或customer有可能是undefined,所以通常使用&&运算符或类似例子中的技巧遍历检查每个层次的定义。

现在你可以用.?运算符来选择性地对数据访问。通过这种方式,如果存在尚未定义的父级对象,则会在链中的任何位置返回未定义,而不是在运行时崩溃。


// v3.7 以前
if (data && data.customer && data.customer.address) {
   const {address} = data.customer
   const fullAddress = `${address.street}, ${address.city}, ${address.state }${address.zipcode}`
}

// v3.7

// data access
const address = data?.customer?.address
const fullAddress = `${address?.street}, ${address?.city}, ${address?.state } ${address?.zipcode}`

// 也适用于数组
customers?.[0]?.['address']

// 检查方法是否已定义并调用
customer.approve?.()

2. 空值合并

从 v3.7 可用

空值合并运算符是||的替代方法,如果左侧是null或undefined,则它返回右侧的表达式。这和||有什么不同?||本质上是javascript中的布尔 OR 运算符,我们尝试利用短路返回第一个非 false 值。这可能会产生意想不到的结果,因为当要求数字 0 或空字符串作为有效输入时,将会被视为false。让我们用一个例子来说明:


// 以前
passPhrase = data.inputString || 'Unknown'  //不会接受 "" (空字符串)
passCode =  data.number || '-1111' // 不会接受 0 
rememberMe = data.rememberFlag || true // 将会总是 true!!!


// 现在
passPhrase = data.inputString ?? 'Unknown'  //仅在 inputString 未定义时为 Unknown
passCode =  data.number ?? '-1111' // 0 可以通过
rememberMe = data.rememberFlag ?? true // false 是有效值

通过这种方式可以明确地区分undefined与false的值。

3. 递归类型别名

从 v3.7 可用

现实世界中的很多数据类型都是递归的。例如,当你尝试处理分层数据时,会发现存在相同类型数据的重复模式。JSON 是一个很好的例子,它本质上是一个哈希映射,而哈希映射本身可以包含另一个映射或映射数组。

在 v3.6 之前,如果必须定义一个简单的jsON 类型,则必须像下面这样:


interface JSONObject { [x: string]: JSONValue; }
interface JSONArray extends Array<JSONValue> { }
type JSONValue = string | number | boolean | JSONObject | JSONArray

如果你尝试将第 1 行和第 2 行的类型在像第 3 那样内联,则可能会出现以下错误:Type alias JSONValue circularly references itself。

在 v3.7 中已经有效解决了这个问题,可以像下面这样简单地进行编码:


type JSONValue = string | number | boolean | { [x: string]: JSONValue } | Array<JSONValue>

4. 断言签名

从 v3.7 可用

你应该知道 typescript 具有类型保护,可以很好地与JavaScript中的typeof和instanceOf运算符一起使用。这有助于为函数的参数添加前提条件,以便将其限制为特定的类型。

让我们写一段把上面提到的这些东西都用到的代码,通过添加类型保护来确保给定的输入是日期,并从中提取年份:


function isDate(input: unknown) : asserts input is Date { 
  if (input instanceof Date) 
    return; 
  else 
    throw new Error('Input must be a Date!'); 
} 

function getYear(input: unknown) : number { 
  isDate(input); 
  return input.getFullYear()  // TypeScripts knows that input is Date 
} 


console.log(getYear(new Date('2019-01-01'))); 
console.log(getYear('2019-01-01')); 

上面的代码看起来很不错,但 TypeScript 仍然会提示getFullYear 在未知类型上不可用。

从 v3.7 开始,TypeScript 添加了一个名为asserts的新关键字,它能够使编译器从断言起就知道正确的类型。对于断言函数,应该添加asserts <param> as <type>而不是返回类型。

这样,如果断言通过,TypeScript 将假定参数是前面定义的类型。修改后的代码如下所示:


function isDate(input: unknown) : asserts input is Date { 
  if (input instanceof Date) 
    return; 
  else 
    throw new Error('Input must be a Date!'); 
} 

function getYear(input: unknown) : number { 
  isDate(input); 
  return input.getFullYear()  // TypeScripts knows that input is Date 
} 


console.log(getYear(new Date('2019-01-01'))); 
console.log(getYear('2019-01-01')); 

5. 为 Promise 提供更好的反馈

从 3.6 起改进

在代码中直接使用 Promise 而忘记使用await或then是常见的错误,如下所示:


interface Customer {
    name: string
    phone: string
}

declare function getCustomerData(id: string): Promise<Customer>;
declare function payCustomer(customer: Customer): void;

async function f() {
    const customer = getCustomerData('c1')
    payCustomer(customer)
}

以前的 TypeScript 完全不了解 Promise,并显示一条与其无关的错误消息,如下所示:

从 v3. 6 开始,编译器变得非常聪明,可以建议你应该兑现 Promise。注意最新的编译器是如何处理相同的错误的:

下面简单讨论一下不需要深入了解细节的一些功能:

6. Unicode 标识符

从 v3.6 可用


const hello = "world"

上面的代码可能不能够在早期版本的 TypeScript 上编译,但是现在你可以从更广泛的 unicode 集中定义标识符。

7. 增量编译

从 v3.4 起可用

如果你在大型项目上使用 TypeScript,则编译器可能需要很长时间才能响应你对该代项目中文件所做的更改。现在有了新的--incremental标志,你可以将其添加到tsc(typescript 编译器)命令行中,这个命令行将会递增地编译修改过的文件。

TypeScript 通过把自从上次编译以来的项目信息保存在代码库内的本地缓存目录中来实现这一目的。在React代码库上,一定要记住在webpack或Parcel进行正确的配置,这样才能在构建管道中利用增量编译。

以上就是7个好用的TypeScript新功能的详细内容,更多关于TypeScript新功能的资料请关注编程网其它相关文章!

--结束END--

本文标题: 7个好用的TypeScript新功能

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

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

猜你喜欢
  • 7个好用的TypeScript新功能
    目录1. 可选链2. 空值合并3. 递归类型别名4. 断言签名5. 为 Promise 提供更好的反馈6. Unicode 标识符7. 增量编译1. 可选链 从 v3.7 可用 这是...
    99+
    2024-04-02
  • ​​​​​​​分享7 个实用 TypeScript 单行代码
    目录1、底部可见2、块数组3、mask4、on / off5、getUUID6、once7、数据库前言: 一般更少的代码通常意味着是更好的代码,因此,今天,我将跟大家分享7个Type...
    99+
    2024-04-02
  • 系统技巧提醒:7个被Windows 7忽略的蛮实用的功能
    下面,为大家总结了7个被忽略的Windows 7功能,具体如下:   1、Sticky Notes(即时贴)   如果您是靠办公桌和电脑显示器上的黄色便利贴去随时提醒您的工作日程的话,那么Windows 7中的Stick...
    99+
    2023-05-25
    Windows 7 系统 功能
  • 在XP和Vista上实现Windows 7的新功能
      Windows 7 Beta的发布成为2009年业界第一个沸点,微软似乎也似乎一下子走出了Windows Vista失败的阴霾,因为几乎所有的评论都是积极的,无论是大幅改进的系统性能还是全新登场的新特点都获得了广泛的...
    99+
    2023-05-24
    Windows 7的新功能 功能 XP 7 Vista
  • 将Windows 7中的AeroSnap功能禁用
    和超级任务栏一样,Windows 7中的AeroSnap功能也是一直饱受争议。很多人抱怨有时候一不留心窗口就最大化了,尤其是像QQ这种须要拖到屏幕边缘自动潜藏的,很容易往上一拖,刷,就最大化了。那么,如果实在须要者功能的...
    99+
    2023-05-24
    AeroSnap 功能
  • 在XP和Vista上如何实现Windows 7的新功能
    小编给大家分享一下在XP和Vista上如何实现Windows 7的新功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!  Windows 7 Beta的发布成为2009年业界第一个沸点,微软似乎也似乎一下子走出了Windo...
    99+
    2023-06-14
  • 让你更好使用Typescript的11个技巧分享
    目录将类型想象成集合理解类型声明和类型收窄使用带有区分的联合类型而不是可选字段使用类型谓词来避免类型断言控制联合类型的分布方式使用穷举式检查,在编译时捕捉未处理的情况优先选择 typ...
    99+
    2023-01-05
    Typescript使用技巧 Typescript技巧
  • ES2020中Javascript10个新功能是怎样的
    这期内容当中小编将会给大家带来有关ES2020中Javascript10个新功能是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。好消息 - ES2020 新功能已经...
    99+
    2024-04-02
  • 如何更合理地使用Windows 7功能让Windows 7飞
    “打开或关闭Windows 7功能”在Windows 7控制面板的程序里面,在程序和功能可以找到这个功能。   如果你对Windows 7中的相关功能不熟悉,可以把鼠标移到这个“功能文...
    99+
    2023-05-25
    Windows 7 7飞 7功能
  • Win8与Win7哪个系统好用?Win8/7性能综合指数对比
    在2012年10月26日,微软公司公司高调宣布推出了Windows 7下一代操作系统:Windows 8。win8是拥有全新的Mego界面,全新的系统核心技术,动态磁贴图标,完善的触控支持以及对ARIVI构...
    99+
    2022-06-04
    好用 综合指数 性能
  • dubbo好用的功能有哪些
    这篇文章主要讲解了“dubbo好用的功能有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“dubbo好用的功能有哪些”吧!直连Provider在开发及测试环境下,可能需要绕过注册中心,只测...
    99+
    2023-06-04
  • 在 Typescript中如何使用可被复用的 Vue Mixin功能
    小编给大家分享一下在 Typescript中如何使用可被复用的 Vue Mixin功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!转到用 Typescript 写 Vue 应用以后,经过...
    99+
    2024-04-02
  • 提高MySQL性能的7个技巧
    译者注: 随着尺寸和负载的增长,MySQL的性能会趋于下降。记住这些诀窍,便可保持MySQL的流畅运行。 测量应用程序的方法之一是看性能。而性能的指标之一便是用户体验,通俗的说法就是“用户是否需要...
    99+
    2022-05-11
    MySQL MySQL
  • TypeScript4.0的新功能怎么使用
    这篇文章主要介绍“TypeScript4.0的新功能怎么使用”,在日常操作中,相信很多人在TypeScript4.0的新功能怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”TypeScript4.0的新...
    99+
    2023-06-27
  • 如何使用Redis和TypeScript开发高性能计算功能
    如何使用Redis和TypeScript开发高性能计算功能概述:Redis是一个开源的内存数据结构存储系统,具有高性能和可扩展性的特点。TypeScript是JavaScript的超集,提供了类型系统和更好的开发工具支持。结合Redis和T...
    99+
    2023-10-22
    redis TypeScript 高性能计算
  • TypeScript赋能Vue Router:探索路由的新境界
    TypeScript集成优势 TypeScript是一种静态类型语言,将类型检查引入JavaScript应用程序中。通过为变量、函数和类指定类型,TypeScript增强了代码的可维护性和可读性。 将TypeScript集成到Vue R...
    99+
    2024-02-15
    Vue Router, TypeScript, 路由管理, 导航保护, 类型注解
  • Flutter可能会凉凉的7个理由
    Flutter是一款由Google推出的跨平台移动应用开发框架,近年来备受关注。尽管Flutter在某些方面表现出色,但仍然有一些人对它的发展前景表示怀疑。近期一些文章针对Flutter的发展提出了不少质疑和批评,称其难以成为移动应用开发的...
    99+
    2023-08-31
    flutter
  • Kubernetes1.5的新功能介绍
    本篇内容介绍了“Kubernetes1.5的新功能介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!主题简介StatefulSets (原名...
    99+
    2023-06-05
  • PHP 8.3 中的新功能
    PHP 8.3 将于2023 年 11 月 23 日发布;它对只读类、新json_validate()函数、最近添加的Randomizer类、堆栈溢出检测等进行了改进。 在本文中,我们将逐一介绍所有功...
    99+
    2023-10-21
    php 开发语言
  • 教你轻松调用Windows 7系统的放大镜功能
      很多使用Windows7操作系统的电脑用户也许都知道系统中自带了一个放大镜工具,一些视力不太好或是老年用户拿到Windows7使用起来也不会有任何障碍,当遇见字体太小看不清楚的时   Windows7系统自...
    99+
    2023-05-29
    Windows7 系统 放大镜 功能 调用 Windows 7系统
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作