我如何得到一个联合对象的一边的类型?



我试图辨别第三方库返回的值的类型。不幸的是,该类型位于非歧视联合的左侧,并且是匿名的(即未标记)。

请看下面的例子:

// 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...
}

在不使用ReturnTypeExtract的情况下,这同样有效。但是,如果在实际代码中someFn的返回类型更复杂,那么将ReturnTypeExtract一起使用可能更可取。

相关内容

  • 没有找到相关文章

最新更新