TypeScript源码中的一个很有意思的简写

在读TypeScript源码时,发现一个很有意思的简写 :

return scriptInfo ?
            scriptInfo.getDefaultProject() :
            (this.logErrorForScriptInfoNotFound(isString(fileNameOrScriptInfo) ? fileNameOrScriptInfo : fileNameOrScriptInfo.fileName), Errors.ThrowNoProject());

注意return语句中第一层三目运算符最后面那部分,在里面直接在逗号运算符后面抛出了错误信息。

这段代码乍看有点不合常规,但是理解了逗号运算符的作用之后,就豁然开朗了,感觉用的很妙。

逗号运算符的作用:

 逗号运算符(,)

逗号,)运算符对它的每个操作数从左到右求值,并返回最后一个操作数的值。这让你可以创建一个复合表达式,其中多个表达式被评估,复合表达式的最终值是其成员表达式中最右边的值。这通常用于为 for 循环提供多个参数。

其实上面那段代码所做的就是如果取不到默认项目,就在返回文件名称或脚本信息的同时抛出异常,终止程序执行。

完整代码如下:

    private doEnsureDefaultProjectForFile(fileNameOrScriptInfo: NormalizedPath | ScriptInfo): Project {this.ensureProjectStructuresUptoDate();const scriptInfo = isString(fileNameOrScriptInfo) ? this.getScriptInfoForNormalizedPath(fileNameOrScriptInfo) : fileNameOrScriptInfo;return scriptInfo ?scriptInfo.getDefaultProject() :(this.logErrorForScriptInfoNotFound(isString(fileNameOrScriptInfo) ? fileNameOrScriptInfo : fileNameOrScriptInfo.fileName), Errors.ThrowNoProject());}

欢迎关注公众号:文本魔术,了解更多

 

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

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

相关文章

挑战Python100题(6)

100 Python challenging programming exercises 6 Question 51 Define a class named American and its subclass NewYorker. Hints: Use class Subclass(ParentClass) to define a subclass. 定义一个名为American的类及其子类NewYorker。 提示:使用class Subcla…

【史上最细教程】1台服务器部署2台MongoDB实例

文章目录 【史上最全教程】1台服务器部署2台MongoDB实例1.下载解压安装包2.配置系统环境变量3.创建实例27017扩展内容(可跳过) 4.配置安全组、防火墙5.可视化工具连接问题1:not authorized on admin to execute command 【史上最全教程】1台服务器部署2台MongoDB实例…

Flink(十一)【状态管理】

Flink 状态管理 我们一直称 Flink 为运行在数据流上的有状态计算框架和处理引擎。在之前的章节中也已经多次提到了“状态”(state),不论是简单聚合、窗口聚合,还是处理函数的应用,都会有状态的身影出现。状态就如同事务…

Java日期工具类LocalDate

Java日期工具类LocalDate 嘚吧嘚java.util.DateJava8新增日期类时区 LocalDate - API创建日期获取年月日修改年月日日期比较 嘚吧嘚 java.util.Date 在Java8之前通常会使用Date结合SimpleDateFormat、Calender来处理时间和日期的相关需求。 1、可读性差、易用性差、使用起来冗…

MyBatisPlus之增删改查

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 MyBatisPlus之增删改查 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、什么是Mybati…

h5 history模式是什么

H5 History模式是一种前端路由的实现方式,与Hash模式不同,它利用了HTML5的history API,通过在真实url后面拼接“/”来实现路由的路径。在这种模式下,当“/”后的路径发生变化时,浏览器会重新发起请求,而不是…

C#的checked关键字判断是否溢出

目录 一、定义 二、示例: 三、生成: 一、定义 使用checked关键字处理溢出。 在进行数学运算时,由于变量类型不同,数值的值域也有所不同。如果变量中的数值超出了变量的值域,则会出现溢出情况,出现溢出…

redis安装部署启动

1、Redis概述 1.1 Redis介绍 Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下: 字符串类型 散列类型 列表类型 …

12.21自动售货机,单物品,多物品

自动售货机 if朴素方法 一种思路是用寄存器cnt记录已有的最小单位货币量,这里就是0.5 当d1时,cnt1;d2时,cnt2;d3时,cnt4; timescale 1ns/1ns module seller1(input wire clk ,input wire rst ,input wire d1 ,input wire d2 …

vue3 组件之间传值

vue3 组件之间传值 非常好,为啥突然开这样一篇博文,首先是因为 vue3 是未来发展的趋势。其次,vue 官方已经确认,将于2023年最后一天停止对 vue2 项目的维护,这个是官方发出的通知,并且呢,尤雨溪…

Mybatis SQL构建器类 - SQL类

下面是一些例子: // Anonymous inner class public String deletePersonSql() {return new SQL() {{DELETE_FROM("PERSON");WHERE("ID #{id}");}}.toString(); }// Builder / Fluent style public String insertPersonSql() {String sql new…

使用umi中的useRequest函数获取返回值中的data为空的问题

umi是一个react脚手架,最近有一个功能,需要在组件第一次渲染前请求一次,后面组件重新渲染不需要再次发送请求。要实现这种功能,我决定使用umi里面的一个hook函数,即useRequest。请求代码如下 const {data:categorys}u…

使用gitpages搭建博客

1 介绍 博客整体效果。在线预览我的博客:https://taot-chen.github.io 支持特性 简约风格博客Powered By Jekyll博客文章搜索自定义社交链接网站访客统计Google Analytics 网站分析Gitalk评论功能自定义关于about页面支持中文布局支持归档与标签 2 新建博客 git…

AI论文范文:AIGC中的图像转视频技术研究

声明: ⚠️本文由智元兔AI写作大师生成,仅供学习参考智元兔-官网|一站式AI服务平台|AI论文写作|免费论文扩写、翻译、降重神器 1 引言 1.1 AIGC技术背景介绍 1.2 图像转视频技术的重要性与应用场景 1.3 研究动机与目标 2 相关工作回顾 2.1 图像转视…

面试算法78:合并排序链表

题目 输入k个排序的链表,请将它们合并成一个排序的链表。 分析:利用最小堆选取值最小的节点 用k个指针分别指向这k个链表的头节点,每次从这k个节点中选取值最小的节点。然后将指向值最小的节点的指针向后移动一步,再比较k个指…

基于51单片机的智能车寻迹系统设计与实现

一、摘要 随着科技的不断发展,智能车在人们生活中的应用越来越广泛。智能车寻迹系统是智能车的一个重要组成部分,它能够使智能车在各种复杂环境中自动识别并沿着预定的轨迹行驶。本文主要介绍了一种基于单片机的智能车寻迹系统的设计与实现方法。该系统…

统信UOS及麒麟KYLINOS操作系统上设置GRUB密码

原文链接:给单用户模式上一层保险!!! hello,大家好啊!今天我要给大家介绍的是在统信UOS及麒麟KYLINOS操作系统上设置GRUB密码的方法。GRUB(GRand Unified Bootloader)是Linux系统中的…

利用F12和Fiddler抓包

网络基础 http 而http协议又分为下面的部分,点击具体条目后可以查看详细信息 http请求消息:请求行(请求方法),请求路径,请求头,请求体(载荷) http响应消息:响应行(响应状态码),响应头,响应体 请求行 即请求方法 get post put patch 响应行 即响应码,常见响应状态…

祖先是否安宁,直接关系到个人以及家运哦!

一直以来,中国古代流传下来的思想就认为,祖先安葬在好的风水福地,一定能给子孙后代带来吉祥如意。相反的,假如祖坟风水不好,则会影响到后人的运气,轻者诸事不顺、重者家庭破裂、噩运连连,所以&a…

【C++杂货铺】C++11新特性——lambda

文章目录 一、C98中的排序二、先来看看 lambda 表达式长什么样三、lambda表达式语法3.1 捕捉列表的使用细节 四、lambda 的底层原理五、结语 一、C98中的排序 在 C98 中,如果要对一个数据集合中的元素进行排序,可以使用 std::sort 方法,下面…