在 TypeScript 中是无效的。为啥我从 console.log 得到结果?

Posted

技术标签:

【中文标题】在 TypeScript 中是无效的。为啥我从 console.log 得到结果?【英文标题】:void in TypeScript. Why do I get the result from the console.log?在 TypeScript 中是无效的。为什么我从 console.log 得到结果? 【发布时间】:2021-07-22 03:47:46 【问题描述】:
let foo: void;
foo = 2;

我没听懂,请给我解释一下。当我们用 LET 输入 void - 好的,我明白了。

但是,当我们在这里输入示例时:

function test(message): void 
  console.log(message);


test("hi");

无论如何,我会得到“嗨”。为什么?

【问题讨论】:

我看不到结果,我只看到控制台日志记录 我非常努力地理解您的问题,但对我来说并没有点击。你到底在问什么?您不确定为什么在 console.log 中得到输出?或者你认为你不应该被允许调用函数log 为了快速:function test(message: string): void -> string 是属性/变量的类型(您的第一个示例 - 在顶部); void 是函数返回的类型(您的第二个示例) 抱歉,我稍微改正了一下。所以是的,为什么我会从函数中得到结果? why am I getting the result from function ← 你没有从函数中得到结果。该函数的副作用是向console.log 发送一条消息,该消息将其打印到控制台,但该函数本身不返回任何内容。 console.log 与函数的返回值不同。 【参考方案1】:

函数的最后一个类型用于定义其返回的类型。

你可能会问,为什么它会起作用?

function test(msg: string): void 
  console.log(msg);

因为它不返回任何东西。

let myVar: void = test("hello!");
console.log(myVar);

当你尝试它时,myVar 将返回undefined,因为函数本身什么也不返回。与this Typescript example相同。

let unusable: void = undefined;

那么返回是什么意思? Return 是从函数返回的数据。示例:

function idk(): string 
   return "Hello World!";

然后,当我执行它时,它确实返回字符串。

let myVar: string = idk();
console.log(myVar);

看看 MDN 的 return documentation。

【讨论】:

感谢您的详细回答。那么,console.log 和 return 做了不同的事情吗? Console.log - 仅向我们显示有关参数的信息。回报 - 给我们价值。对吗? 是的,没错。我忘了提到console.log的使用。但就是这样。【参考方案2】:

我有点搞不懂

我没听懂,请给我解释一下。当我们用 LET 输入 void - 好的,我得到了

但是如果我在脑海中正确解析它,问题的后半部分显示 void 作为函数的返回类型(在这种情况下,什么都没有),而问题的前半部分显示一个 void 变量,其中 Typescript 只允许 nullundefined 作为分配。

后半部分有效,因为该函数不尝试返回任何内容。它不接受“void”作为参数。 message 类型是无类型的,因此实际上允许任何对象进入。

【讨论】:

以上是关于在 TypeScript 中是无效的。为啥我从 console.log 得到结果?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我从这个查询中得到无效号码?

为啥 5.0/3 在 C 中是 1.666667?

为啥这个不等式在 C 中是 False 的? [复制]

当我从样式组件中使用我自己的库时出现无效的钩子调用错误

为啥指向未定义结构的指针有时在 C 和 C++ 中是非法的

TypeScript在Model中是如何操作运用的?本文详解