From 4749251c712d90ff906251e23f8044031993c934 Mon Sep 17 00:00:00 2001 From: tomvdk Date: Wed, 18 May 2022 19:19:07 +0200 Subject: [PATCH] Added check on SupportsTypeOnlyImports when TypeScript version is >= 4.3 and updated File.liquid template for TypeScript (#4005) * - The TypeScript compiler type checking produces an error for the import of the axios types - Not possible to change the preserveValueImports or isolatedModules compiler options because they are needed by vite-vue - also see Issue 3964 - type-only imports for axios (https://github.com/RicoSuter/NSwag/issues/3964) - Changed axios imports to support import type when typescript version >= 4.3 by adding SupportsTypeOnlyImports in TypeScriptFileTemplateModel.cs - It is supported as from TypeScript version 3.8 but only versions 2.7, 4.3, so picked 4.3 (https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html) * changed to TypeScript 3.8 as its supported from this version (https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html) You can't set it in the UI but user can define free value in JSON configuration. Co-authored-by: Tom van de Kerkhof --- .../Models/TypeScriptFileTemplateModel.cs | 3 +++ src/NSwag.CodeGeneration.TypeScript/Templates/File.liquid | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/NSwag.CodeGeneration.TypeScript/Models/TypeScriptFileTemplateModel.cs b/src/NSwag.CodeGeneration.TypeScript/Models/TypeScriptFileTemplateModel.cs index 495a39a809..eac318d868 100644 --- a/src/NSwag.CodeGeneration.TypeScript/Models/TypeScriptFileTemplateModel.cs +++ b/src/NSwag.CodeGeneration.TypeScript/Models/TypeScriptFileTemplateModel.cs @@ -164,6 +164,9 @@ public IEnumerable ResponseClassNames /// Gets a value indicating whether the target TypeScript version supports override keyword. public bool SupportsOverrideKeyword => _settings.TypeScriptGeneratorSettings.SupportsOverrideKeyword; + /// Gets a value indicating whether the target TypeScript version supports Type-Only imports + public bool SupportsTypeOnlyImports => _settings.TypeScriptGeneratorSettings.TypeScriptVersion >= 3.8m; + private string GenerateExtensionCodeAfter() { var clientClassesVariable = "{" + string.Join(", ", _clientTypes diff --git a/src/NSwag.CodeGeneration.TypeScript/Templates/File.liquid b/src/NSwag.CodeGeneration.TypeScript/Templates/File.liquid index 7ff7fc3fb9..1a7bfda708 100644 --- a/src/NSwag.CodeGeneration.TypeScript/Templates/File.liquid +++ b/src/NSwag.CodeGeneration.TypeScript/Templates/File.liquid @@ -42,8 +42,12 @@ import { HttpClient, RequestInit } from 'aurelia-fetch-client'; import * as ng from 'angular'; {%- endif -%} {%- if Framework.IsAxios -%} - +{%- if SupportsTypeOnlyImports -%} +import axios, { AxiosError } from 'axios'; +import type { AxiosInstance, AxiosRequestConfig, AxiosResponse, CancelToken } from 'axios'; +{%- else -%} import axios, { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse, CancelToken } from 'axios'; +{%- endif -%} {%- endif -%} {%- if Framework.IsKnockout -%}