区别在于前者你是直接传了一个字面量进去,后者是通过一个中间变量(且未声明类型)传入的。 对于前者而言 TS 的类型检查会更严格,这一特性叫 **[Freshness](https://link.segmentfault.com/?enc=1z9niGJAWQuAqWl8U5FzRA%3D%3D.j3j3BJV5vJYQ9u2iYjpi9IeQT3%2FKKSKglWw7Y%2F4Idhgb3PeSmaNH1j%2FqBubqmceyRbdN9W00ClsSxt7rLH0opw%3D%3D)** (默认开启,可通过 tsconfig.json 里的 `suppressExcessPropertyErrors` 配置项关闭)。而后者就是普通的鸭子类型检查。 至于为啥有这种特性,感兴趣可以自己搜索了解。 P.S. 问题一并不是个问题,只是 TS 报错是一种“懒检查”,即同类型的错误已经检查到了后面就跳过了,这样能显著地加快检查速度。你把 name1 删了就能看到 age 也一样报错了。