UNPKG

typescript-transform-macros

Version:
99 lines (69 loc) 2.67 kB
<!--@[h1([pkg.name]), paragraph([pkg.description])]--> # typescript-transform-macros Typescript Transform Macros <!--/@--> [![Build Status](https://img.shields.io/travis/LeDDGroup/typescript-transform-macros/master.svg)](https://travis-ci.org/LeDDGroup/typescript-transform-macros) [![Maintainability](https://api.codeclimate.com/v1/badges/81de2b2c8735684e4020/maintainability)](https://codeclimate.com/github/LeDDGroup/typescript-transform-macros/maintainability) [![codecov](https://codecov.io/gh/LeDDGroup/typescript-transform-macros/branch/master/graph/badge.svg)](https://codecov.io/gh/LeDDGroup/typescript-transform-macros) <!--@shields("npm", "prettier", "ConventionalCommits", "spacemacs")--> [![npm version](https://img.shields.io/npm/v/typescript-transform-macros.svg)](https://www.npmjs.com/package/typescript-transform-macros) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier) [![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org) [![Built with Spacemacs](https://raw.githubusercontent.com/syl20bnr/spacemacs/master/assets/spacemacs-badge.svg?sanitize=true)](http://spacemacs.org) <!--/@--> Examples from <https://github.com/codemix/babel-plugin-macros>. <!--@installation()--> ## Installation ```sh npm install --save-dev typescript-transform-macros ``` <!--/@--> ## Usage with [ttypescript](https://github.com/cevek/ttypescript/) Add it to _plugins_ in your _tsconfig.json_ ```json { "compilerOptions": { "plugins": [{ "transform": "typescript-transform-macros" }] } } ``` Also declare globally the _MACRO_ function: ```ts declare function MACRO<T>(t: T): T; ``` ## Example _Input:_ <!--@snippet("./examples/ttypescript/index.ts")--> ```ts declare function MACRO<T>(t: T): T; const MAP = MACRO( <T, L>( inputConst: T[], visitor: (value: T, index?: number, input?: T[]) => L ) => { const input = inputConst; const length = input.length; const result = new Array(length) as L[]; for (let i = 0; i < length; i++) { result[i] = visitor(input[i], i, input); } return result; } ); declare interface Array<T> { MAP: Array<T>["map"]; } console.log([1, 2, 3].MAP(n => 3 * n + 1)); ``` <!--/@--> _Output:_ <!--@example("./examples/ttypescript/index.js")--> ```js "use strict"; const input_1 = [1, 2, 3]; const length_1 = input_1.length; const result_1 = new Array(length_1); for (let i_1 = 0; i_1 < length_1; i_1++) { result_1[i_1] = 3 * input_1[i_1] + 1; } console.log(result_1); //> [ 4, 7, 10 ] ``` <!--/@-->