From 9f6592a756edf28642a404a9f55610653359ced2 Mon Sep 17 00:00:00 2001 From: Kenny Westermark Date: Wed, 28 Jan 2026 00:30:33 +0100 Subject: [PATCH 1/2] fix(TypeScript): use import type for enum types Enums are generated as TypeScript type aliases, so they must use 'import type' for compatibility with verbatimModuleSyntax. Fixes part of #2959 --- .../Writers/TypeScript/CodeUsingWriter.cs | 4 +++ .../TypeScript/CodeUsingWriterTests.cs | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/Kiota.Builder/Writers/TypeScript/CodeUsingWriter.cs b/src/Kiota.Builder/Writers/TypeScript/CodeUsingWriter.cs index 7a40d7b2ed..06a82d8f63 100644 --- a/src/Kiota.Builder/Writers/TypeScript/CodeUsingWriter.cs +++ b/src/Kiota.Builder/Writers/TypeScript/CodeUsingWriter.cs @@ -46,6 +46,10 @@ private static bool GetShouldUseTypeImport(CodeUsing codeUsing) if (codeUsing.Declaration is CodeType codeType) { if (codeType.TypeDefinition is CodeInterface) return true; + // Enums are generated as TypeScript type aliases (e.g., `export type MyEnum = ...`), + // so they must use `import type` for compatibility with verbatimModuleSyntax. + // See: https://github.com/microsoft/kiota/issues/2959 + if (codeType.TypeDefinition is CodeEnum) return true; // this will handle edge cases for typescript Declarations that are already known to be interfaces: RequestConfiguration, QueryParameters, and Model classes if (codeType.TypeDefinition is CodeClass codeClass && codeClass.IsOfKind(CodeClassKind.RequestConfiguration, CodeClassKind.QueryParameters, CodeClassKind.Model)) return true; } diff --git a/tests/Kiota.Builder.Tests/Writers/TypeScript/CodeUsingWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/TypeScript/CodeUsingWriterTests.cs index a196c8464f..b05c2e5aed 100644 --- a/tests/Kiota.Builder.Tests/Writers/TypeScript/CodeUsingWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/TypeScript/CodeUsingWriterTests.cs @@ -188,4 +188,30 @@ public void WritesImportTypeStatementForModel() Assert.Contains("// @ts-ignore", result); Assert.Contains("import { type Bar } from", result); } + + [Fact] + public void WritesImportTypeStatementForEnum() + { + // Enums are generated as TypeScript type aliases (e.g., `export type MyEnum = ...`), + // so they must use `import type` for compatibility with verbatimModuleSyntax. + // See: https://github.com/microsoft/kiota/issues/2959 + var usingWriter = new CodeUsingWriter("foo"); + var codeEnum = root.AddEnum(new CodeEnum + { + Name = "MyStatus", + }).First(); + var us = new CodeUsing + { + Name = "MyStatus", + Declaration = new CodeType + { + Name = codeEnum.Name, + TypeDefinition = codeEnum, + } + }; + usingWriter.WriteCodeElement(new CodeUsing[] { us }, root, writer); + var result = tw.ToString(); + Assert.Contains("// @ts-ignore", result); + Assert.Contains("import { type MyStatus } from", result); + } } From e36ccb51c1c1013523cb263cd5ce784f35b1422c Mon Sep 17 00:00:00 2001 From: Kenny Westermark Date: Thu, 29 Jan 2026 00:31:07 +0100 Subject: [PATCH 2/2] Update changelog: Fix TypeScript enum imports for type aliases --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ced9083f79..095b991cf8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Fixed TypeScript enum imports to use `import type` for type aliases to support `verbatimModuleSyntax`. [#7332](https://github.com/microsoft/kiota/pull/7332) + ## [1.30.0] - 2026-01-26 ### Added