TypeScript code generator for ImmutableJS
Codegen all you need to use ImmutableJS in your TypeScript application. Also uses type information to emit functions to parse nested Records.
Install
With npm do:
npm install tsimmutable --save-dev
Example
Write a file with your models (e.g. models.ts
):
Compile it:
./node_modules/.bin/tsimmutable models.ts --out=models-imm.ts --indexerType=void --emitRecords --emitMarkers --emitEmptyRecords
See the output.
Options
--out Output file name. Default: stdout
--keyType Emit map with Map<$keyType, ...> type. Default: "string"
--indexerType Emit map with Map<string, $indexerType> type. Default: "any"
--emitMaps Shoud emitter emit Maps? Default: true
--emitRecords Shoud emitter emit Records? Default: false
--emitMarkers Shoud emitter emit type markers? Default: false
--emitEmptyRecords Shoud emitter emit empty default records? Default: false
--emitTypedMethods Shoud emitter emit typed methods? Default: false
--defaultEmptyType Emit empty records with fields initializer by this value. Default: "null"
JS API
;let result = ;
Webpack plugin
tsimmutable
goes together with webpack plugin which
helps to watch and re-generate your model files when initial interface files change.
Usage:
var TsImmutablePlugin = require('tsimmutable/plugin');
module.exports = {
resolve: {
extensions: ['', '.ts', '.js']
},
module: {
loaders: [
{
test: /\.ts$/,
loader: 'awesome-typescript-loader?module=common'
}
]
},
entry: {
index: ['./index.ts']
},
output: {
path: './dist',
filename: './[name].js'
},
plugins: [
new TsImmutablePlugin({
files: [
'./models.ts'
],
/*
* Every option below is optional.
*/
suffix: '-i',
verbose: true,
indexerType: 'any',
emitMaps: false,
emitRecords: true,
emitMarkers: true,
emitEmptyRecords: true,
emitTypedMethods: true,
defaultEmptyType: 'null'
})
]
};
Limitations
- Inline object types will not work:
export interface User {
profile: {
a: User
};
}
- Two-dimensional array types will not work:
export interface User {
profile: User[][]
}
License
MIT