流函数的逆变类型参数?

问题描述

我有两种(实际上更多)类型,基本上是一个基本类型和一个(实际上是多个)扩展类型。我的一个函数只对基本类型参​​数进行操作 - 它只会读取对象而不更新它。但是它应该接受任何形式的子类型并且没有问题。

所以函数应该是逆变的(如果我错了,请纠正我,我倾向于将它们混在一起),我相信说变量是只读的,它应该可以正常工作吗?

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 (将#修改为@)