![require(esm) Backported to Node.js 20, Paving the Way for ESM-Only Packages](https://cdn.sanity.io/images/cgdhsj6q/production/be8ab80c8efa5907bc341c6fefe9aa20d239d890-1600x1097.png?w=400&fit=max&auto=format)
Security News
require(esm) Backported to Node.js 20, Paving the Way for ESM-Only Packages
require(esm) backported to Node.js 20, easing the transition to ESM-only packages and reducing complexity for developers as Node 18 nears end-of-life.
Simple library to derive TypeScript interfaces from JS object / JSON examples
Simple functions to derive a TypeScript interface from a JavaScript object example.
npm install -g derive-ts
# OR
npx derive-ts
The deriveInterfaceFromObject function can be imported and used in code also. The deriveInterfaceFromObject function accepts three parameters: a JavaScript object to convert to a TypeScript interface, an interface name to use in the generated TypeScript, and optionally a boolean flag if the code should be prettified or not (defaults to true).
Install the package locally in your project:
npm install --save derive-ts
and then:
const { deriveInterfaceFromObject } = require('derive-ts');
deriveInterfaceFromObject({ a: 1, b: 2, c: 3 }, 'MyInterface', true)
.then((typeScriptInterfaceString) => {
console.log(typeScriptInterfaceString);
})
.catch((error) => {
console.error(error);
});
The above will log the following:
export interface MyInterface {
a: number;
b: number;
c: number;
}
The prettifyCode code function is also exported from the library so you can pass in your own prettier options to format the generated TypeScript. It accepts two parameters: the code string to format and an object with the prettier options.
The CLI can be used by installing the derive-ts
package or with npx
:
npm install --global derive-ts
derive-ts derive examples/example.js -n Test -i example -o output.ts
# OR
npx derive-ts derive examples/example.js -n Test -i example -o output.ts
This is the main command that accepts parameters of a JavaScript file containing the example object to derive the TypeScript interface from.
-n, --interface-name <name> Name of the outputted interface
-i, --import-name <importName> Name of the object exported from the specified file
-o, --output-file <outputFilePath> File to save the interface to
A JavaScript file has been created called 'example.js' with the following contents:
exports.example = {
address_components: [
{ long_name: '8035', short_name: '8035', types: ['street_number'] },
{ long_name: 'Market Street', short_name: 'Market St', types: ['route'] },
{ long_name: 'Wilmington', short_name: 'Wilmington', types: ['locality', 'political'] },
],
adr_address:
'<span class="street-address">8035 Market St</span>, <span class="locality">Wilmington</span>, <span class="region">NC</span> <span class="postal-code">28411</span>, <span class="country-name">USA</span>',
business_status: 'OPERATIONAL',
formatted_address: '8035 Market St, Wilmington, NC 28411, USA',
formatted_phone_number: '(910) 686-2007',
vicinity: '8035 Market Street, Wilmington',
website:
'https://restaurants.subway.com/united-states/nc/wilmington/8035-market-st?utm_source=yxt-goog&utm_medium=local&utm_term=acq&utm_content=60848&utm_campaign=evergreen-2020&y_source=1_MTQ4OTUyNzYtNzE1LWxvY2F0aW9uLmdvb2dsZV93ZWJzaXRlX292ZXJyaWRl',
};
After running the following command:
derive-ts derive ./example.js --output-file output.ts --interface-name Test --import-name example
The following file is generated 'output.ts' with the contents:
export interface Test {
address_components: {
long_name: string;
short_name: string;
types: string[];
}[];
adr_address: string;
business_status: string;
formatted_address: string;
formatted_phone_number: string;
vicinity: string;
website: string;
}
A JavaScript file has been created called 'example.js' with the following contents:
exports.example = {
address_components: [
{ long_name: '8035', short_name: '8035', types: ['street_number'] },
{ long_name: 'Market Street', short_name: 'Market St', types: ['route'] },
{ long_name: 'Wilmington', short_name: 'Wilmington', types: ['locality', 'political'] },
],
adr_address:
'<span class="street-address">8035 Market St</span>, <span class="locality">Wilmington</span>, <span class="region">NC</span> <span class="postal-code">28411</span>, <span class="country-name">USA</span>',
business_status: 'OPERATIONAL',
formatted_address: '8035 Market St, Wilmington, NC 28411, USA',
formatted_phone_number: '(910) 686-2007',
vicinity: '8035 Market Street, Wilmington',
website:
'https://restaurants.subway.com/united-states/nc/wilmington/8035-market-st?utm_source=yxt-goog&utm_medium=local&utm_term=acq&utm_content=60848&utm_campaign=evergreen-2020&y_source=1_MTQ4OTUyNzYtNzE1LWxvY2F0aW9uLmdvb2dsZV93ZWJzaXRlX292ZXJyaWRl',
};
After running the following command (notice the --sub-interfaces
flag in the command)
derive-ts derive ./example.js --output-file output.ts --interface-name Test --import-name example --sub-interfaces
The following file is generated 'output.ts' with the contents:
export interface AddressComponents {
long_name: string;
short_name: string;
types: string[];
}
export interface Test {
address_components: AddressComponents[];
adr_address: string;
business_status: string;
formatted_address: string;
formatted_phone_number: string;
vicinity: string;
website: string;
}
FAQs
Simple library to derive TypeScript interfaces from JS object / JSON examples
The npm package derive-ts receives a total of 1 weekly downloads. As such, derive-ts popularity was classified as not popular.
We found that derive-ts demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
require(esm) backported to Node.js 20, easing the transition to ESM-only packages and reducing complexity for developers as Node 18 nears end-of-life.
Security News
PyPI now supports iOS and Android wheels, making it easier for Python developers to distribute mobile packages.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.