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

为何返回Promise<number>的TypeScript代码能绕过类型检查?

问题原因分析

你这段代码能绕过TypeScript的类型检查,核心原因是手动给resolve标注了Function类型。

Function是TS里最宽泛的函数类型,它不限制参数的类型、数量,也不约束返回值。当你把resolve定义成Function时,TS会完全跳过对它的参数校验,所以传入字符串"me"不会触发编译错误。

如果去掉resolve的类型标注,让TS自动推导类型,它会根据Promise<number>的泛型参数,自动把resolve推导为(value: number | PromiseLike<number>) => void类型。这时候再传字符串进去,就会立刻触发编译错误:

function Me(): Promise<number> {
    return new Promise(
        (resolve, reject) => {
            resolve("me"); // 编译报错:类型"string"的参数不能赋给类型"number | PromiseLike<number>"的参数
        }
    )
}

至于严格编译配置的影响:哪怕你开启了strict: true,只要手动把resolve标注为Function,TS同样不会报错——因为Function本身就是设计用来兼容任意函数的兜底类型。但如果没开严格模式,TS对类型推导的宽松度会更高,不过这不是导致当前问题的核心原因。

内容的提问来源于stack exchange,提问作者sz ppeter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:09:49