如何从联合中提取单一类型?
How to extract single Type from a union?
假设我有这种类型:
type FooArray = IFoo[] | number[] | undefined
是否可以从中提取 IFoo
?
是的。由于 TypeScript 2.8 supports conditional types 你可以这样做:
interface IFoo {
name: string
}
type FooArray = IFoo[] | number[] | undefined
type FindType<TWhere> = TWhere extends (infer U)[] ? (U extends object ? U : never) : never
type FoundType = FindType<FooArray> // FoundType == IFoo
请注意,U extends object ? U : never
是必需的,因此 number
不匹配。
为了完整性 Exclude
也可以使用类型查询,从而产生可读性很好的东西
interface IFoo {
name: string
}
type FooArray = IFoo[] | number[] | undefined
type ArrayValues = Exclude<FooArray, undefined>[number] // IFoo | number
type IFooExtracted = Exclude<ArrayValues, number> // IFoo
假设我有这种类型:
type FooArray = IFoo[] | number[] | undefined
是否可以从中提取 IFoo
?
是的。由于 TypeScript 2.8 supports conditional types 你可以这样做:
interface IFoo {
name: string
}
type FooArray = IFoo[] | number[] | undefined
type FindType<TWhere> = TWhere extends (infer U)[] ? (U extends object ? U : never) : never
type FoundType = FindType<FooArray> // FoundType == IFoo
请注意,U extends object ? U : never
是必需的,因此 number
不匹配。
为了完整性 Exclude
也可以使用类型查询,从而产生可读性很好的东西
interface IFoo {
name: string
}
type FooArray = IFoo[] | number[] | undefined
type ArrayValues = Exclude<FooArray, undefined>[number] // IFoo | number
type IFooExtracted = Exclude<ArrayValues, number> // IFoo