We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 2e46823 commit d6d1ff4Copy full SHA for d6d1ff4
typescript/src/utilTypes.ts
@@ -0,0 +1,14 @@
1
+import { ConditionalPick } from 'type-fest'
2
+
3
+type Tail<T> = T extends readonly [...any[], infer U] ? U : never
4
+type GetIs<T> = T extends (elem: any) => elem is infer T ? T : never
5
6
+type TSNodeIs = ConditionalPick<typeof ts, (node: ts.Node) => node is ts.Node>
7
+type Comparisons = {
8
+ [T in keyof TSNodeIs as T extends `is${infer U}` ? /* Uncapitalize<U> */ U : never]: GetIs<(typeof ts)[T & keyof typeof ts]>
9
+}
10
11
+export type MatchParentsType = <K extends keyof Comparisons, const T extends readonly [...K[]]>(
12
+ node: ts.Node | undefined,
13
+ treeToCompare: T,
14
+) => Comparisons[Tail<T> & keyof Comparisons] | undefined
0 commit comments