18 lines
466 B
TypeScript
18 lines
466 B
TypeScript
type UnionToIntersection<U> =
|
|
(U extends any ? (k: U) => void : never) extends ((k: infer I) => void)
|
|
? I
|
|
: never;
|
|
|
|
export default function overload<T extends readonly [...any[]]>(
|
|
imps: T): UnionToIntersection<T[number]> {
|
|
return <any>((...a: any[]) => {
|
|
for (let i = 0; i < imps.length; ++i) {
|
|
try {
|
|
const val = imps[i](...a)
|
|
return val
|
|
} catch {
|
|
}
|
|
}
|
|
})
|
|
}
|