You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中返回值为联合类型的函数与函数类型联合的差异疑问

TypeScript中返回值为联合类型的函数与函数类型联合的差异疑问

嘿,你是不是也会觉得下面这两种函数类型看起来没啥区别?但实际上TypeScript在类型校验的时候可是分得门儿清,不信看这段代码:

declare let foo: () => number | string;
declare let bar: (() => number) | (() => string);

foo = bar; // 完全没问题
bar = foo; // <- 这里会直接报错!

为啥会出现这种情况呢?给你简单拆解下:

  • foo的类型是一个返回number或string的函数,它本身是单一的函数类型,只是返回值是联合类型而已,调用它时你没法确定拿到的是数字还是字符串,但它始终是同一个函数类型。
  • bar的类型是两种函数类型的联合:要么是只能返回number的函数,要么是只能返回string的函数,它代表的是两类不同的函数。

所以当你把bar赋值给foo时,不管bar属于哪一类函数,它的返回值都符合number | string的要求,自然能通过校验。但反过来,foo是一个可能返回任意联合类型值的函数,它没法保证自己一定是只返回数字或者只返回字符串的单一类型函数,所以赋值给bar就会触发类型错误啦。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 12:53:14