我试图辨别第三方库返回的值的类型。不幸的是,该类型位于非歧视联合的左侧,并且是匿名的(即未标记)。
请看下面的例子:
// given an anonymous return type from a non-discriminated union...
const someFn = function(): ({ colour: string, flavour: string } | Error) {
return { colour: 'blue', flavour: 'blue' }
}
// how do I extract the left hand side type?
type Flavour = FlavourOrError[0]
(TIL)通过使用函数中的ReturnType
,我能够辨别类型。
然后用Extract
得到左边的类型。
// 1. get the return type of the function...
type ReturnUnion = ReturnType<typeof someFn>
// 2. extract the left hand side type, using a sample field...
type LeftHandSideType = Extract<ReturnUnion, { colour: string }>
// 3. later, use duck typing...
const value = someFn()
if (typeof (value as LeftHandSideType).colour !== 'undefined') {
// do something with it...
}
我不明白为什么你不能使用"常规的javascript ";方法并检查返回值是否为错误:
const value = someFn();
if (!(value instanceof Error)) {
// do something with it...
}
在不使用ReturnType
和Extract
的情况下,这同样有效。但是,如果在实际代码中someFn
的返回类型更复杂,那么将ReturnType
与Extract
一起使用可能更可取。