问题描述
我通过“传播” 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,我得知我被允许传递额外的属性,但似乎确切的类型阻止了这种行为。
正确的方法是什么?
编辑: 感谢@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]