问题描述
我有两种(实际上更多)类型,基本上是一个基本类型和一个(实际上是多个)扩展类型。我的一个函数只对基本类型参数进行操作 - 它只会读取对象而不更新它。但是它应该接受任何形式的子类型并且没有问题。
所以函数应该是逆变的(如果我错了,请纠正我,我倾向于将它们混在一起),我相信说变量是只读的,它应该可以正常工作吗?
type baseTy = {|
id: number;
|}
type extendedTy = {|
...baseTy,extra: string,|}
const dat: extendedTy = {
id: 1,extra: 'test',}
function getDoubleId(dat: $ReadOnly<baseTy>) {
return dat.id * 2;
}
function doIt() {
getDoubleId(dat);
}
但是,如果我在 flow 上尝试上述操作,则会收到以下错误:
Cannot call `getDoubleId` with `dat` bound to `dat` because property `extra` is missing in `baseTy` [1] but exists in `extendedTy` [2]. [prop-missing]
这对我来说似乎很奇怪:通过声明变量是只读的,它应该接受基类型中的任何“子”,对吗?
我已经尝试添加 $Shape<baseTy>
- 以“删除”基本类型周围的确切标记,但有相同的错误....
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)