Skip to content

kelsny/typefp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

   _/                                        _/_/
_/_/_/_/  _/    _/  _/_/_/      _/_/      _/      _/_/_/
 _/      _/    _/  _/    _/  _/_/_/_/  _/_/_/_/  _/    _/
_/      _/    _/  _/    _/  _/          _/      _/    _/
 _/_/    _/_/_/  _/_/_/      _/_/_/    _/      _/_/_/
            _/  _/                            _/
       _/_/    _/                            _/
presented by cursorsdottsx

TypeScript type creation made easier with a functional programming domain-specific language.

TypeScript's type system was always extremely powerful but intimidating. New users would find themselves stuck at the gates of conditional types and struggle to understand how to create their very own types.

No more, for typefp is here!

typefp aims to provide a very familiar DSL that is easy to pick up and use.

usage

typefp is available on NPM and you can install it with either NPM or Yarn:

$ npm install typefp --save
$ yarn add typefp

You can also add it globally to use the CLI:

$ npm install typefp --global

In VSCode, you can also install the extension for DSL support.

use it programmatically

import typefp from "typefp";

// compile a file with an absolute path and get the output
typefp.compile(file: string): string;

// parse a string into an abstract syntax tree
typefp.parse(content: string): ParseData[];

// transform an array of strings into an array of extended identifier objects
typefp.params(input: string[]): ExtendedIdentifier[];

use it terminally

$ typefp --help
Options:
  -h, --help       Displays all options                                [boolean]
  -v, --version    Displays the version number                         [boolean]
  -e, --extension  Extension of files to compile                        [string]
  -d, --directory  Directory to compile                                 [string]
  -s, --silent     Disables console output                             [boolean]
  -o, --out        Output file                                          [string]
  -c, --config     Path to configuration file                           [string]
  -w, --watch      Recompiles input files on change                    [boolean]

syntax

# this is a comment
# comments can only be on its own line

# define a type
# if's with optional else's are allowed
def TypeName(Param1)
    if (Param1 is boolean)
        return Param1

# parameters can have type annotations
def TypeName(Param1: Type, Param2)
    if (Param1 is string)
        return [Param1, "string"]
    else
        return [Param2, "any"]

# define an exported type
# nested if-else
exdef ExportedTypeName(Param1: Type, Param2)
    if (Param1 is string)
        if (Param2 is number)
            return [Param1, PropertyKey]
        else
            return [Param2, Param1]
    else
        return [Param2, "any"]

more

  • Look in the examples folder for examples.
  • Contribute to typefp!
  • Find bugs or issues!
  • leave a ⭐️ pls 🥺

About

TypeScript type creation made easier with a functional programming domain-specific language.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published