微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法获得宽度子类型以使用确切类型

如何解决无法获得宽度子类型以使用确切类型

我通过“传播” 2种确切的类型来创建类型:

-B

我不明白为什么我不能按如下方式进行宽度子类型化:

type Type1 = {|foo: number|};
type Type2 = {|bar: string|};
type Both = {|...Type1,...Type2|};

我收到此错误

var a: Both = {foo: 42,bar: 'baz'};

function fooTest(arg: Type1) {
    console.log(arg.foo);
}

fooTest(a);

但是从this page,我得知我被允许传递额外的属性,但似乎确切的类型阻止了这种行为。

正确的方法是什么?

Try it

编辑: 感谢@Aleksey L.的指针,我最终将函数的参数类型转换为不精确的参数:

../\-:11: fooTest(a);
                  ^ Cannot call `fooTest` with `a` bound to `arg` because property `bar` is missing in `Type1` [1] but exists in `Both` [2]. [prop-missing]
References:
../\-:7: function fooTest(arg: Type1) {
                               ^ [1]
../\-:5: var a: Both = {foo: 42,bar: 'baz'};
                ^ [2]

解决方法

否,将具有“额外”属性的对象传递给确切的对象类型是无效的

确切的对象类型会禁用宽度子类型,并且不允许存在其他属性。

更多信息here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。