Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

TypeScript extension for Yellicode, an extensible code generator

License

NotificationsYou must be signed in to change notification settings

yellicode/typescript-extension

Repository files navigation

Generate TypeScript code using powerful TypeScript code generation templates! ThisYellicode extension lets you generate TypeScript classes, interfaces, enumerations and their members from different kinds of models, using a fully typed code writer.

License: MIT

About Yellicode

Yellicode lets you build your own code generation templates with TypeScript. It consists of a Node.js CLI and extensible APIs, making it easy for developers to create, share and re-use code generators for their favorite programming languages and frameworks.

Check outour website for more.

Using the TypeScript package

Prerequisites

In order to run a code generation template, you must have the CLI installed (@yellicode/cli) globally and have a validcodegenconfig.json file in your working directory. Please refer to theinstallation instructions and thequick start for more.

Installation

Open a terminal/command prompt in your working directory and install this package as a dev dependency:

npm install @yellicode/typescript --save-dev

Using the TypeScriptWriter

The main class for generating TypeScript code is theTypeScriptWriter. TheTypeScriptWriter can work with 2 different model kinds as input:

MostTypeScriptWriter functions have 2 overloads which can be used for each different kind of input. For example, thewriteClassBlock function has thefollowing overloads:

  1. public writeClassBlock(cls: ClassDefinition, contents: (writer: TypeScriptWriter) => void): void
  2. public writeClassBlock(cls: elements.Type, contents: (writer: TypeScriptWriter) => void, options?: opts.ClassOptions): void

The first overload accepts aClassDefinition, which has the following structure (comments left out for brevity):

exportinterfaceClassDefinitionextendsTypeDefinition{isAbstract?:boolean;implements?:string[];extends?:string[];properties?:PropertyDefinition[];}

When using this overload, you should build the definition in your code generation template. You can do this manually, but typically you wouldconfigure a JSON file as model (see theYellicode quick start for a how-to) and transform that JSON structure to a TypeScript definition.

The second overload accepts aclass instance from a Yellicode model and accepts an optionalClassOptionsobject to control code generation (internally, the Yellicode class is transformed to aClassDefinition).

Examples

Note: a ZIP archive with working examples is alsoavailable for download here.

Example using a TypeScript code definition

This sample creates a simple TypeScript definition of aTask class, which is then provided to theTypeScriptWriter. You would typically create this definition from another structure (your own JSON model, using the 'model' parameter).

import{TextWriter}from'@yellicode/core';import{Generator}from'@yellicode/templating';import{TypeScriptWriter,ClassDefinition}from'@yellicode/typescript';Generator.generate({outputFile:'./custom-sample.ts'},(output:TextWriter)=>{constclassDefinition:ClassDefinition={name:'Task',export:true,description:['Represents an activity to be done.']};classDefinition.properties=[{name:'TaskDescription',typeName:'string',accessModifier:'public',description:['Gets or sets a description of the task.']},{name:'IsFinished',typeName:'boolean',accessModifier:'public',description:['Indicates if the task is finished.']}];constts=newTypeScriptWriter(output);ts.writeClassBlock(classDefinition,()=>{classDefinition.properties.forEach(p=>{ts.writeProperty(p);ts.writeLine();})});});

The generated TypeScript code will look as follows:

/*** Represents an activity to be done.*/exportclassTask{/*** Gets or sets a description of the task.*/publicTaskDescription:string;/*** Indicates if the task is finished.*/publicIsFinished:boolean;}

Example using a Yellicode model

For navigating a Yellicode model in template code, you should also have the@yellicode/elements package installed in your working directory:

npm install @yellicode/elements --save-dev

This template generates a TypeScript code file with all classes in the model and, for each class, write property for each class attribute.

import{TextWriter}from'@yellicode/core';import{Generator}from'@yellicode/templating';import{TypeScriptWriter}from'@yellicode/typescript';import*aselementsfrom'@yellicode/elements';Generator.generateFromModel({outputFile:'./model-based-sample.ts'},(output:TextWriter,model:elements.Model)=>{constts=newTypeScriptWriter(output);model.getAllClasses().forEach(cls=>{ts.writeClassBlock(cls,()=>{cls.ownedAttributes.forEach(att=>{ts.writeProperty(att);ts.writeLine();});},{export:true});ts.writeLine();});});

API Documentation

For all TypeScriptWriter functions and options, check out theAPI documentation.

About

TypeScript extension for Yellicode, an extensible code generator

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors3

  •  
  •  
  •  

[8]ページ先頭

©2009-2025 Movatter.jp