Fonlow.TypeScriptCodeDomCore 3.1.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package Fonlow.TypeScriptCodeDomCore --version 3.1.1
NuGet\Install-Package Fonlow.TypeScriptCodeDomCore -Version 3.1.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Fonlow.TypeScriptCodeDomCore" Version="3.1.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Fonlow.TypeScriptCodeDomCore --version 3.1.1
#r "nuget: Fonlow.TypeScriptCodeDomCore, 3.1.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Fonlow.TypeScriptCodeDomCore as a Cake Addin
#addin nuget:?package=Fonlow.TypeScriptCodeDomCore&version=3.1.1

// Install Fonlow.TypeScriptCodeDomCore as a Cake Tool
#tool nuget:?package=Fonlow.TypeScriptCodeDomCore&version=3.1.1

CodeDOM in .NET (Framework) has come with 3 providers:

  1. CSharpCodeProvider
  2. VBCodeProvider
  3. JScriptCodeProvider

While JSCriptCodeProvider is good enough for generating JavaScript codes for Internet Explorer however IE had been discoutinued. TypeScriptCodeProvider provides extra benefits over a "JavaScript Provider":

  1. Strongly typed interfaces and function prototypes for validation during design time and compile time.
  2. Re-use some portion of CodeDOM codes if a code generator toolset like WebApiClientGen and OpenApiClientGen targets multiple OO languages.
  3. Naturally and inheriently adapt the evolution of the JavaScript standard as long as TypeScript will.
  4. Live well with TypeScript frameworks like Angular 2+ and Auralia. And with Angular Reactive Forms, runtime validation could become possible, similar to the use cases of using validation attributes to decorate a member property of a .NET class.

TypeScript CodeDOM logo

What Supported and Not

CodeDOM covers almost every essential C# language features, however, not every features of such coverage is applicable to TypeScript.

GeneratorSupport Enum

bool ICodeGenerator.Supports(GeneratorSupport supports)
{
	return (supports & supported) != 0;
}

const GeneratorSupport supported = GeneratorSupport.ArraysOfArrays
	| GeneratorSupport.MultidimensionalArrays
	| GeneratorSupport.TryCatchStatements
	| GeneratorSupport.DeclareValueTypes
	| GeneratorSupport.DeclareEnums
	| GeneratorSupport.StaticConstructors
	| GeneratorSupport.DeclareInterfaces
	| GeneratorSupport.DeclareDelegates
	| GeneratorSupport.NestedTypes
	| GeneratorSupport.MultipleInterfaceMembers
	| GeneratorSupport.ComplexExpressions
	| GeneratorSupport.GenericTypeReference
	| GeneratorSupport.GenericTypeDeclaration
   ;

Supported CodeDOM Classes

Most supported classes are covered by unit testing, while some are covered by integration testing in some code generator projects, marked as "Indirectly" in the table below.

Class Unit Tests
CodeArgumentReferenceExpression TestCodeArgumentReferenceExpression
CodeArrayCreateExpression TestCodeArrayCreateExpression*
CodeArrayIndexerExpression TestCodeArrayIndexerExpression*
CodeAssignStatement TestCodeAssignStatement
CodeAttributeDeclaration / CodeAttributeDeclarationCollection Test*Decorators
CodeAttributeArgument / CodeAttributeArgumentCollection Indirectly
CodeBaseReferenceExpression TestCodeBaseReferenceExpression
CodeBinaryOperatorExpression TestCodeIterationStatement
CodeBinaryOperatorType TestCodeIterationStatement
CodeCastExpression TestCodeCastExpression
CodeCatchClause / CodeCatchClauseCollection TestCodeTryCatchFinallyStatement, TestCodeTryCatchFinallyStatement
CodeCommentStatement / CodeCommentStatementCollection TestCodeCommentStatement*
CodeCompileUnit Indirectly
CodeConditionStatement TestCodeConditionStatement*
CodeConstructor Indirectly
CodeDirective / CodeDirectiveCollection Indirectly with CodeRegionDirective
CodeTypeDelegate TestCodeTypeDelegate
CodeExpressionStatement TestCodeIterationStatement
CodeExpression TestCodeExpression
CodeExpressionCollection Indirectly
CodeFieldReferenceExpression TestCodeFieldReferenceExpression
CodeIndexerExpression TestCodeIterationStatement
CodeIterationStatement TestCodeIterationStatement
CodeMemberField TestCodeTypeDeclarationWithMembers
CodeMemberMethod TestCodeTypeDeclarationWithMethodAndParameterDecorators
CodeMemberProperty TestCodeTypeDeclarationWithPropertyMembers
CodeMethodInvokeExpression TestCodeIterationStatement, TestCodeTryCatchFinallyStatement, TestCodeTryCatchStatement
CodeMethodReferenceExpression TestCodeMethodReferenceExpression, TestCodeMethodReferenceExpressionGeneric, TestCodeIterationStatement
CodeMethodReturnStatement TestCodeMethodReturnStatement
CodeNamespace / CodeNamespaceCollection Indirectly
CodeObject Indirectly in many derived classes
CodeObjectCreateExpression TestCodeObjectCreateExpression*
CodeParameterDeclarationExpression / CodeParameterDeclarationExpressionCollection TestTuple4Callback, TestTupleCallbackSnipet, TestTupleCallbackSnipet, TestCodeParameterDeclarationExpression
CodePrimitiveExpression TestCodeArrayCreateExpressionWithInit, and many
CodePropertyReferenceExpression TestCodePropertyReferenceExpression
CodeRegionDirective TestPersonWithRegions, Test2TypesWithRegions
CodeSnippetExpression TestCodeArrayIndexerExpression, and many
CodeSnippetStatement TestCodeConditionStatement, and many
CodeSnippetTypeMember Indirectly
CodeStatement / CodeStatementCollection TestCodeConditionStatementElse, and many
CodeThisReferenceExpression TestCodePropertyReferenceExpression, and many
CodeThrowExceptionStatement TestCodeThrowExceptionStatement
CodeTryCatchFinallyStatement TestCodeTryCatchFinallyStatement, TestCodeTryFinallyStatement, TestCodeTryCatchStatement
CodeTypeDeclaration TestCodeTypeDeclaration*
CodeTypeDeclarationCollection Indirectly with namespace.Types
CodeTypeMember / CodeTypeMemberCollection Indirectly
CodeTypeOfExpression TestCodeTypeOfExpression
CodeTypeParameter / CodeTypeParameterCollection Indirectly
CodeTypeReference / CodeTypeReferenceCollection TestCodeArrayCreateExpressionWithoutInit, and many
CodeTypeReferenceExpression TestCodeTypeReferenceExpression, TestCodeIterationStatement
CodeVariableDeclarationStatement TestCodeVariableDeclarationStatement*
CodeVariableReferenceExpression TestCodeVariableReferenceExpression, and many

Hints:

  • There are integration tests in PocoToTS, WebApiClientGen and OpenApiClientGen, covering some classes like XxxCollection.
Examples Utilizing TypeScriptProvider
Generated Code Examples

CodeDOM Features Applicable to TypeScript but not Supported in TypeScriptProvider

CodeDOM Features Not Applicable to TypeScript

Product Compatible and additional computed target framework versions.
.NET net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Fonlow.TypeScriptCodeDomCore:

Package Downloads
Fonlow.Poco2TsCore

Generate data model interfaces in TypsScript from POCO classes. This has been used in POCO2TS.exe and Strongly Typed Client API for Web API.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
3.2.1 543 2/27/2024
3.2.0 223 2/21/2024
3.1.1 261 2/10/2024
3.1.0 177 2/9/2024
3.0.0 234 2/1/2024
2.9.2 473 12/17/2023
2.9.1 230 12/16/2023
2.9.0 325 12/15/2023
2.8.1 228 11/7/2023
2.8.0 326 11/7/2023
2.7.0 822 11/16/2022
2.6.1 5,132 6/14/2022
2.6.0 2,977 2/5/2022
2.5.0 2,836 2/12/2021
2.3.2 2,721 6/28/2020
2.3.1 3,779 4/16/2020
2.3.0 6,532 2/16/2020
2.2.1 489 2/16/2020
2.2.0 3,638 11/26/2019
2.1.0 2,538 11/11/2019
2.0.1 10,149 12/6/2018
2.0.0 1,555 9/1/2018
1.9.1 2,184 8/27/2018
1.9.0 1,653 8/9/2018
1.8.1 2,784 5/7/2018

More CodeDOM classes supported to maximize the intersection of CodeDOM and TypeScript language features.