Skip to content

Commit 2f4f328

Browse files
committed
stricter type for constructors
1 parent 27ccf55 commit 2f4f328

1 file changed

Lines changed: 4 additions & 5 deletions

File tree

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

Lines changed: 4 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,7 @@ export function createNonterminalVariantSimpleCreator<
2928
U extends SlangPolymorphicNode,
3029
T extends StrictPolymorphicNode
3130
>(
32-
constructors: [SlangAstNodeClass, ConstructorsFromInstances<T['variant']>][]
31+
constructors: [SlangAstNodeClass, NodeConstructor<T['variant']>][]
3332
): NonterminalVariantFactory<U, T> {
3433
return (variant, collected) => {
3534
for (const [slangAstClass, constructor] of constructors) {
@@ -45,10 +44,10 @@ export function createNonterminalVariantCreator<
4544
U extends SlangPolymorphicNode,
4645
T extends StrictPolymorphicNode
4746
>(
48-
constructors: [SlangAstNodeClass, ConstructorsFromInstances<T['variant']>][],
47+
constructors: [SlangAstNodeClass, NodeConstructor<T['variant']>][],
4948
extractVariantConstructors: [
5049
SlangAstNodeClass,
51-
ConstructorsFromInstances<StrictPolymorphicNode>
50+
NodeConstructor<StrictPolymorphicNode>
5251
][]
5352
): NonterminalVariantFactory<U, T> {
5453
const simpleCreator = createNonterminalVariantSimpleCreator<U, T>(

0 commit comments

Comments
 (0)