A plugin for Strapi v4 that automatically converts your Strapi schemas into Typescript interfaces.
Strapi-Plugin-Schemas-to-TS is a plugin for Strapi v4 that automatically converts your Strapi schemas into Typescript interfaces.
In every execution of the Strapi server, it reads all files containing schema definitions, both content types and components. Then generates Typescript interfaces based on those definitions. The interfaces will only be generated if they don't exist or if there have been changes. Otherwise they will be skipped, preventing the Strapi server to restart (in development) when modifying files.
Here are the instructions to install and configure the package:
To install the plugin execute either one of the following commands:
# Using Yarn
yarn add strapi-plugin-schemas-to-ts
# Using NPM
npm install strapi-plugin-schemas-to-ts
The plugin needs to be configured in the ./config/plugins.ts
file of Strapi. The file might need to be created if it does not exists. In that file, the plugin must be enabled in order for it to work:
1
2
3
4
5
6
7
export default {
// ...
'schemas-to-ts': {
enabled: true,
},
// ...
}
While the previous example is enough to get it working, there are 3 different properties that can be configured. Their default values are the ones in this example:
1
2
3
4
5
6
7
8
9
10
11
12
13
export default {
// ...
'schemas-to-ts': {
enabled: true,
config: {
acceptedNodeEnvs: ["development"],
commonInterfacesFolderName: "schemas-to-ts",
verboseLogs: false,
alwaysAddEnumSuffix: false
}
},
// ...
}
common
interfaces (see below) will be generated in the ./src/common/{commonInterfacesFolderName}
folder. If there's no value assigned to this property, or in case the value is empty ("") it will use the default value, so it will be ./src/common/schemas-to-ts
.Enum
suffix. For instance: CarType
would become CarTypeEnum
.There are 3 different interface sources: API, Component & Common.
For every schema, different types of interfaces will be generated. That is because Strapi v4 does not always represent the data using the same structure.
attributes
property.attributes
property, so the id property and the rest of the properties are at the same level.Strapi enumeration attributes will be generated as typescript enums. However there are some considerations regarding enum names:
Here's an example of the last two points:
1
2
3
4
5
export enum Year {
Starting2012 = 'Starting-2012',
_2013 = '2013',
Ending2014 = 'Ending-2014'
}
src/components/{component collection name}/interfaces
. The component collection name
value is the folder where the component schema is located.src/common/{commonInterfacesFolderName}
. The commonInterfacesFolderName
value is a config property of this plugin.This project is licensed under the MIT License - see the LICENSE file for details.
Please, review the changelog to know about the differences between published versions of this project.
This project began as a fork of the Types-4-Strapi created by Francesco Lorenzetti, but at the end it was so different on it's purpose (being a plugin Vs being executed on demand) and there was so much new code that I turned it into a new whole project. However the algorithm to convert the schema into an interface is heavily inspired in Francesco's work.
npm install strapi-plugin-schemas-to-ts
Check out the available plugin resources that will help you to develop your plugin or provider and get it listed on the marketplace.