【问题标题】:Returning an implicit type type of a Union in TypeScript在 TypeScript 中返回 Union 的隐式类型
【发布时间】:2020-11-06 12:19:46
【问题描述】:

我正在学习 TypeScript 课程,下面的代码应该返回 10 联合的隐式类型和字符串文字“test”:10 | “测试”。有人可以向我解释一下吗?当我运行它时,我得到的输出本身只有 10。还是我理解错了?

   function withImplicitReturnType(b: boolean) {
        if (b) {
            return 10;
        }
        return "test";
    }
    console.log(withImplicitReturnType(true));

【问题讨论】:

    标签: typescript union-types


    【解决方案1】:

    TypeScript 被编译为 JavaScript,而 JavaScript(代码在其中运行并为您提供 console.log 输出)没有类型的概念 - 它只运行纯 JavaScript,即:

    function withImplicitReturnType(b) {
      if (b) {
        return 10;
      }
      return "test";
    }
    console.log(withImplicitReturnType(true));

    该函数在此处调用时返回 10,因此记录了 10。

    10 | 'test' union 类型只能在 TypeScript 中看到,例如在智能感知中,但在代码编译后运行的 JavaScript 中是看不到的。

    如果您想使用该联合,请记住联合只是一个类型,因此它对类型检查很有用,但它不会存在于发出的 JavaScript 代码中。

    【讨论】:

    • 感谢@CertainPerformace。我想这个例子是错误的,因为讲师说这个特定的例子应该返回 10 联合的隐式类型和字符串文字“test”:10 | “test”,因为 return 10 和 return “test” 在两个不同的地方返回两种不同的类型。
    • 函数的返回 type 单独是联合,但是如果你传递一个类型缩小的布尔值(即绝对真或假,而不是之前未知的东西运行时),TypeScript 将能够确定它将采用哪条路径,以及实际返回值是什么。 withImplicitReturnType(true) 返回 10 类型的表达式,withImplicitReturnType(Math.random() < 0.5) 返回 10 | 'test' 类型的表达式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    相关资源
    最近更新 更多