Type transformer for TypeScript to JSON Schema
npm install --save-dev typescript @ts-to-json-schema/transform
import * as ts from 'typescript';
import transform from '@ts-to-json-schema/transform';
const program = ts.createProgram(['./index.ts'], compilerOptions);
const sourceFiles = program.getSourceFiles();
const compilerOptions = {
lib: ["es2015"],
strict: true,
};
for (const sourceFile of sourceFiles) {
const transformedSourceFile = ts.transform(
sourceFile,
[transform(program)],
compilerOptions
);
const result = ts.createPrinter().printNode(
ts.EmitHint.Unspecified,
transformedSourceFile.transformed[0],
sourceFile
);
console.log(result);
}
To apply the transformation to the TypeScript code using bundlers/runners (such as Webpack, ts-node, etc.), you must use an alternative compiler that supports plugins. Install one of the following compilers based on TypeScript version:
TypeScript Version | Compiler | Documentation |
---|---|---|
5.x or newer | ts-patch/compiler |
link |
3.x, 4.x | ttypescript |
link |
npm install --save-dev ts-patch
Follow the instructions in the documentation to configure @ts-to-json-schema/transform
plugin.
You need to enable strict
mode too.
{
"compilerOptions": {
"strict": true,
"plugins": [
{ "transform": "@ts-to-json-schema/transform", "type": "program" }
]
}
}
If you just need compile/transform your TypeScript code into JavaScript code,
you can use one of following commands instead of tsc
:
-
ttsc
(forttypescript
) -
tspc
(forts-patch
)
Set the alternative compiler as ts-node compiler argument:
ts-node --compiler=ts-patch/compiler src/index.ts
Set the alternative compiler in ts-loader options
module.exports = {
// ...
module: {
rules: [
{
test: /\.ts$/,
loader: 'ts-loader',
exclude: /node_modules/,
options: {
compiler: 'ts-patch/compiler', // add here
},
},
],
}
};
Follow the instructions in the ESBuild plugin documentation.