From 2958649a9594641fe6d59f8342888372871405fa Mon Sep 17 00:00:00 2001 From: Arthur Ozga Date: Wed, 22 Mar 2017 14:33:49 -0700 Subject: [PATCH] Enum and enum literal --- src/compiler/checker.ts | 6 ++++-- .../codeFixClassImplementInterfacePropertyEnum.ts | 13 +++++++++++++ ...FixClassImplementInterfacePropertyEnumLiteral.ts | 13 +++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 tests/cases/fourslash/codeFixClassImplementInterfacePropertyEnum.ts create mode 100644 tests/cases/fourslash/codeFixClassImplementInterfacePropertyEnumLiteral.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c4eaed3fdef..2790d03934d 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2266,7 +2266,8 @@ namespace ts { return createKeywordTypeNode(SyntaxKind.BooleanKeyword); } if (type.flags & TypeFlags.Enum) { - throw new Error ("enums not implemented") + const name = createNameFromSymbol(type.symbol); + return createTypeReferenceNode(name, /*typeArguments*/ undefined); } if (type.flags & (TypeFlags.StringLiteral)) { return createLiteralTypeNode((createLiteral((type).text))); @@ -2278,7 +2279,8 @@ namespace ts { return (type).intrinsicName === "true" ? createTrue() : createFalse(); } if (type.flags & TypeFlags.EnumLiteral) { - throw new Error("enum literal not implemented"); + const name = createNameFromSymbol(type.symbol); + return createTypeReferenceNode(name, /*typeArguments*/ undefined); } if (type.flags & TypeFlags.Void) { return createKeywordTypeNode(SyntaxKind.VoidKeyword); diff --git a/tests/cases/fourslash/codeFixClassImplementInterfacePropertyEnum.ts b/tests/cases/fourslash/codeFixClassImplementInterfacePropertyEnum.ts new file mode 100644 index 00000000000..8b04e4a4b45 --- /dev/null +++ b/tests/cases/fourslash/codeFixClassImplementInterfacePropertyEnum.ts @@ -0,0 +1,13 @@ +/// + +// @lib: es2017 + +//// enum E { a,b,c } +//// interface I { +//// a: E; +//// } +//// class C implements I {[| |]} + +verify.rangeAfterCodeFix(` + a: E; +`); \ No newline at end of file diff --git a/tests/cases/fourslash/codeFixClassImplementInterfacePropertyEnumLiteral.ts b/tests/cases/fourslash/codeFixClassImplementInterfacePropertyEnumLiteral.ts new file mode 100644 index 00000000000..720acc1cccf --- /dev/null +++ b/tests/cases/fourslash/codeFixClassImplementInterfacePropertyEnumLiteral.ts @@ -0,0 +1,13 @@ +/// + +// @lib: es2017 + +//// enum E { a,b,c } +//// interface I { +//// a: E.a +//// } +//// class C implements I {[| |]} + +verify.rangeAfterCodeFix(` + a: E.a; +`); \ No newline at end of file