JSPM

  • Created
  • Published
  • Downloads 2
  • Score
    100M100P100Q56790F
  • License MIT

Convert json or jsonc to typescript type (interface)

Package Exports

  • typeof-jsonc

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (typeof-jsonc) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

typeof-jsonc npm version

typeof-jsonc is a library for Convert json or jsonc string to typescript type (interface)

Online Playgrounds

Support

  • Basic types
  • Array types (support auto merge)
  • Same struct auto merge
  • Comments
  • JsDocComments
  • Custom naming
  • Json
  • Jsonc
  • Not standard jsonc or json

Usage

install

npm install typeof-jsonc -S

or

yarn add typeof-jsonc -S

Demo

Jsonc string

{
  "barr": [
    // aaa
    "aaa",
    "bbb"
  ],
  "name": "lanfeng", // this is name
  // this is demo
  "demo": {
    "hello": "world"
  },
  /** this is arr */
  "arr": [
    {
      "age": 1
    },
    2
  ],
  "a": "hello",
  "b": ["a", "b"]
}

Convert script

import fs from 'fs';
import path from 'path';

import { typeofJsonc } from '../src/index';

const text = fs.readFileSync(path.resolve('./demo/test'), {
  encoding: 'utf-8',
});

console.log(
  typeofJsonc(text, 'Response', {
    prefix: 'I',
    rootFlags: 1,
    disallowComments: false,
    addExport: true,
    singleLineJsDocComments: true,
  }),
);

Output

export interface IResponse {
  /**  aaa  */
  barr: string[];
  /**  this is name  */
  name: string;
  /**  this is demo  */
  demo: IDemo;
  /**  this is arr  */
  arr: (IArr | number)[];
  a: string;
  b: string[];
}

/**  this is arr  */
export interface IArr {
  age: number;
}

export interface IDemo {
  hello: string;
}

API

  • typeofJsonc(jsonc: string, name: string, options?: Options)
interface Options {
  /** type name prefix */
  prefix?: string; // default ''
  /**  customer named */
  onName?: (name: string) => string;
  /** Add export keywords */
  addExport?: boolean; // default false
  /**
   * Identifiers are e.g. legal variable names. They may not be reserved words
   * None = 0,
   * Module = 1,
   * InAmbientNamespace = 2,
   */
  rootFlags?: number; // default 0
  disallowComments?: boolean; // defalut true
  singleLineJsDocComments?: boolean; // default false
}
option type default desc
prefix string "" type name prefix
onName (name: string) => string (name: string) => ${prefix}${name} Custom naming If this option set prefix will not work
addExport boolean false Add export keywords, when set true rootFlags set will not work
rootFlags number 0 Identifiers are e.g. legal variable names. They may not be reserved words None = 0 Module = 1 InAmbientNamespace = 2
disallowComments boolean true Whether to prohibit the generation of comments
singleLineJsDocComments boolean false Single-line display when single-line comment

Version

1.1.9

  • Implementation refactor
  • Same struct auto merge

1.1.8

  • Fix addExport bug
  • Pack umd and es lib

1.1.6

  • Support singleLineJsDocComments options

1.1.5

  • Support convert not standard jsonc or json

Standard jsonc or json demo

{
  "name": "test",
  "age": 13,
  "loves": ["A", "B"]
}

Not standard jsonc or json demo

{
  name: '',
  age: 13,
  loves: ['A', 'B']
}

License

MIT