Skip to content

Commit 888d9b7

Browse files
committed
stricter type for constructors
1 parent 27ccf55 commit 888d9b7

1 file changed

Lines changed: 10 additions & 5 deletions

File tree

src/slang-utils/create-nonterminal-variant-creator.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ import type {
1212
SlangAstNodeClass
1313
} from '../types.d.ts';
1414

15-
type Constructor<T> = new (ast: any, collected: CollectedMetadata) => T;
16-
type ConstructorsFromInstances<U> = U extends any ? Constructor<U> : never;
15+
type NodeConstructor<T> = new (ast: any, collected: CollectedMetadata) => T;
1716
type SlangPolymorphicNode = Extract<SlangAstNode, { variant: unknown }>;
1817

1918
type NonterminalVariantFactory<
@@ -29,7 +28,10 @@ export function createNonterminalVariantSimpleCreator<
2928
U extends SlangPolymorphicNode,
3029
T extends StrictPolymorphicNode
3130
>(
32-
constructors: [SlangAstNodeClass, ConstructorsFromInstances<T['variant']>][]
31+
constructors: [
32+
SlangAstNodeClass,
33+
NodeConstructor<Exclude<T['variant'], StrictPolymorphicNode>>
34+
][]
3335
): NonterminalVariantFactory<U, T> {
3436
return (variant, collected) => {
3537
for (const [slangAstClass, constructor] of constructors) {
@@ -45,10 +47,13 @@ export function createNonterminalVariantCreator<
4547
U extends SlangPolymorphicNode,
4648
T extends StrictPolymorphicNode
4749
>(
48-
constructors: [SlangAstNodeClass, ConstructorsFromInstances<T['variant']>][],
50+
constructors: [
51+
SlangAstNodeClass,
52+
NodeConstructor<Exclude<T['variant'], StrictPolymorphicNode>>
53+
][],
4954
extractVariantConstructors: [
5055
SlangAstNodeClass,
51-
ConstructorsFromInstances<StrictPolymorphicNode>
56+
NodeConstructor<StrictPolymorphicNode>
5257
][]
5358
): NonterminalVariantFactory<U, T> {
5459
const simpleCreator = createNonterminalVariantSimpleCreator<U, T>(

0 commit comments

Comments
 (0)