首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Flow不允许与更严格版本匹配的对象

Flow不允许与更严格版本匹配的对象
EN

Stack Overflow用户
提问于 2019-03-04 16:44:47
回答 2查看 26关注 0票数 0

考虑以下内容(活链):

代码语言:javascript
运行
复制
type Range = { min: ?(number | string), max: ?(number | string) }
const myFn = (range: Range) => console.log(range)

type NumberRange = { min: ?number, max: ?number }
const aRange: NumberRange = { min: 0, max: 100 }
myFn(aRange)

流动投诉:

无法使用绑定到myFnaRange调用range,因为数字1与属性max中的字符串2不兼容。 无法使用绑定到myFnaRange调用range,因为数字1与属性min中的字符串2不兼容。

在我看来,NumberRange本质上是Range的一个子集,所以这种使用应该可以使用Flow。有什么办法能让这件事成功吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-05 14:19:29

问题是对象是可变的,所以myFn可以执行range.min = "foo"; range.max = "bar";Range类型允许它,但是aRange将是一个包含字符串的NumberRange

如果通过在属性名称之前添加"+“来生成Range的属性,则表示不允许myFn对这些属性进行变异:

代码语言:javascript
运行
复制
type Range = { +min: ?(number | string), +max: ?(number | string) }

试流

票数 1
EN

Stack Overflow用户

发布于 2019-03-04 17:32:16

如果不打算混合minmax的类型,则可以将Range改为Union类型。

代码语言:javascript
运行
复制
type NumberRange = { min: ?number, max: ?number }
type StringRange = { min: ?string, max: ?string }

type Range = NumberRange | StringRange
const myFn = (range: Range) => console.log(range)

const aRange: NumberRange = { min: 0, max: 100 }
myFn(aRange)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54987774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档