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

2023-12-30 10:09:41

在读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());
    }

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

?

文章来源:https://blog.csdn.net/wannianchuan/article/details/135274605
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。