我有2个接口:TypeA
和TypeB
。
我的React脚本收到类型为Object
的对象TypeA|TypeB
。
我有一个函数doSomething(attribute:TypeA)
我想将Object
传递为这样的属性doSomething(Object)
,
但是TS说
键入'TypeA | TypeB'不能分配给TypeA。 类型“ TypeB”缺少类型“ TypeA”中的以下属性:prop1,prop2,prop3。
也许我只能设置类型为TypeA
的新临时变量,然后将其传递给函数?
const tempVar:Type1 = Object
我已经尝试过了
const tempVar:Type1 = Object instanceof Type` ? Object : undefined ;
但是除了上面的错误之外,我还会收到此错误
“ Type1”仅引用一种类型,但在此处被用作值。
由于无法更改函数doSomething()
来接受两种类型,因此是否有解决方法?
答案 0 :(得分:2)
您可以创建一个custom type guard,然后调用它来缩小类型。如果函数返回true,则Typescript知道对象是指定的类型。例如:
const isTypeA = (obj: TypeA | TypeB): obj is TypeA => {
return obj.prop1 === 'value1';
}
// elsewhere:
function somefunction(obj: TypeA | TypeB) {
if (isTypeA(obj)) {
// Inside this block typescript knows that obj is a TypeA, and can't be a TypeB
doSomething(obj);
}
}
答案 1 :(得分:1)