Skip to content

Commit b06ff2d

Browse files
committed
Refactor isEnumLiteralDeclaration() to allow assumptions about members
1 parent 34312af commit b06ff2d

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

src/compiler/checker.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -16712,7 +16712,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1671216712
}
1671316713
// `var MyEnum: enum = { FirstValue: 1, SecondValue: 2 }` should resolve to a union of the enum values.
1671416714
if (node.parent && isEnumLiteralDeclaration(node.parent)) {
16715-
return links.resolvedType = checkExpressionCached((node.parent as VariableDeclaration).initializer as Expression);
16715+
return links.resolvedType = checkExpressionCached(node.parent.initializer);
1671616716
}
1671716717
let symbol: Symbol | undefined;
1671816718
let type: Type | undefined;

src/compiler/types.ts

+8
Original file line numberDiff line numberDiff line change
@@ -1883,6 +1883,14 @@ export interface VariableDeclaration extends NamedDeclaration, JSDocContainer {
18831883
readonly initializer?: Expression; // Optional initializer
18841884
}
18851885

1886+
export interface EnumLiteralDeclaration extends VariableDeclaration {
1887+
readonly kind: SyntaxKind.VariableDeclaration;
1888+
readonly parent: VariableDeclarationList;
1889+
readonly name: BindingName;
1890+
readonly type?: TypeReferenceNode;
1891+
readonly initializer: EnumLiteralExpression;
1892+
}
1893+
18861894
/** @internal */
18871895
export type InitializedVariableDeclaration = VariableDeclaration & { readonly initializer: Expression; };
18881896

src/compiler/utilitiesPublic.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import {
5656
EntityName,
5757
entityNameToString,
5858
EnumDeclaration,
59+
EnumLiteralDeclaration,
5960
every,
6061
ExportAssignment,
6162
ExportDeclaration,
@@ -1431,7 +1432,7 @@ export function isEnumTypeReference(node: Node): boolean {
14311432
return isTypeReferenceNode(node) && isIdentifier(node.typeName) &&
14321433
node.typeName.escapedText === "enum" && !node.typeArguments;
14331434
}
1434-
export function isEnumLiteralDeclaration(node: Node): boolean {
1435+
export function isEnumLiteralDeclaration(node: Node): node is EnumLiteralDeclaration {
14351436
return isVariableDeclaration(node) && hasType(node) && isEnumTypeReference(node.type!) && hasInitializer(node) && isEnumLiteralExpression(node.initializer!);
14361437
}
14371438

0 commit comments

Comments
 (0)