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

为何这段TypeScript代码未出现类型错误?

TypeScript允许参数更少的函数赋值给目标类型的原因

这是TypeScript函数兼容性规则的设计结果,核心逻辑是这种赋值在JavaScript运行时是完全安全的:

  • 当你把() => 123赋值给Foo类型(要求接收一个number参数并返回number)时,调用foo(123)时,JS会自动忽略未被函数接收的多余参数,函数依然能正常返回123,不会触发任何运行时错误。
  • TypeScript的类型系统优先保障运行时安全性,既然这种赋值不会导致问题,就允许通过类型检查。

额外说明

反过来的场景(参数更多的函数赋值给参数更少的函数类型),虽然TypeScript默认允许,但实际调用时可能隐含风险(比如函数期望接收参数但调用时未传入,参数值会变成undefined)。不过开启strictFunctionTypes严格模式后,TypeScript会对这类场景进行更严格的校验。

实际运行验证

下面的代码可以正常运行,不会有任何问题:

type Foo = (a: number) => number;
const foo: Foo = () => 123;
console.log(foo(456)); // 输出 123

而如果传入不符合类型要求的参数,TypeScript会立刻报错:

foo('hello'); // 类型错误:"string"类型参数无法赋值给"number"类型参数

内容的提问来源于stack exchange,提问作者Lee Jongseo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:27:50