Skip to content

Commit 7a397ea

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

File tree

4 files changed

+19
-3
lines changed

4 files changed

+19
-3
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

tests/baselines/reference/api/typescript.d.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -4529,6 +4529,13 @@ declare namespace ts {
45294529
readonly type?: TypeNode;
45304530
readonly initializer?: Expression;
45314531
}
4532+
interface EnumLiteralDeclaration extends VariableDeclaration {
4533+
readonly kind: SyntaxKind.VariableDeclaration;
4534+
readonly parent: VariableDeclarationList;
4535+
readonly name: BindingName;
4536+
readonly type: TypeReferenceNode;
4537+
readonly initializer: EnumLiteralExpression;
4538+
}
45324539
interface VariableDeclarationList extends Node {
45334540
readonly kind: SyntaxKind.VariableDeclarationList;
45344541
readonly parent: VariableStatement | ForStatement | ForOfStatement | ForInStatement;
@@ -8740,7 +8747,7 @@ declare namespace ts {
87408747
function isNullishCoalesce(node: Node): boolean;
87418748
function isConstTypeReference(node: Node): boolean;
87428749
function isEnumTypeReference(node: Node): boolean;
8743-
function isEnumLiteralDeclaration(node: Node): boolean;
8750+
function isEnumLiteralDeclaration(node: Node): node is EnumLiteralDeclaration;
87448751
function isEnumTypeAnnotation(node: Node): boolean;
87458752
function skipPartiallyEmittedExpressions(node: Expression): Expression;
87468753
function skipPartiallyEmittedExpressions(node: Node): Node;

0 commit comments

Comments
 (0)