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

Flow中两种对象类型定义语法{}与{|}的区别是什么

Flow两种对象类型定义语法差异

普通{}语法:开放对象类型

  • 该写法声明的是开放对象类型,仅校验定义中存在的属性类型,允许对象携带未在类型中声明的额外属性,Flow不会对额外属性做校验。
  • 代码示例:
type User = {
  name: string
}
// 以下代码不会报错,额外的age属性不会被校验
const user: User = { name: '张三', age: 25 }
  • 适用场景:需要兼容未知额外属性、或者要做对象类型继承扩展的场景。

{| |}语法:精确对象类型

  • 该写法声明的是精确对象类型,会严格限制对象的结构,只能包含类型定义中声明的属性,只要出现未声明的属性,Flow会直接抛出类型错误。
  • 代码示例:
type ExactUser = {|
  name: string
|}
// 以下代码会报错,提示age不属于ExactUser的定义属性
const user: ExactUser = { name: '张三', age: 25 }
  • 补充说明:如果你的Flow配置开启了exact_by_default=true,那么普通{}定义的对象类型默认也会按精确对象处理,此时如果需要声明开放对象,需要主动添加...标记:type OpenUser = { name: string, ... }。

内容的提问来源于stack exchange,提问作者Massimiliano。

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:57:03