TypeScript icon, indicating that this package has built-in type declarations

    2.0.14 • Public • Published


    NPM version NPM download contributors

    Convert the Strapi models to TypeScript interfaces by processing each of the ./api/**/models/*.settings.json recursively.

    Install and Run

    npm install -g strapi-to-typescript
    sts path/to/strapi/api/ -o path/to/your/types/dir/
    # see all doc
    sts -h
    # external conf. see: strapi-to-typescript/index.d.ts for format
    sts -c .stsconfig.js

    Command line option

    sts input -g components -o output ...


    • input
      Strapi folder(s)/file(s) with models *.settings.json
      You may define multiple inputs. In case your API models have relations to other plugins like 'users-permissions'. sts path/to/strapi/api/ path/to/strapi/plugins/users-permissions/models -o path/to/your/types/dir/

      • Order matters, if you have two models with the same name, the last one is used.
      • Add '!' to exclude folder or subfolder, ex: !path/to/strapi/plugins_excluded.
    • -g components
      Strapi folder(s) with components models


    • -o output
      Output folder
    • -n nested
      Put all interfaces in a nested tree instead of directly under the output folder
    • -u collectionCanBeUndefined
      By default, all collection can not be undefined. You can turn this off, so only unrequired collections may be undefined.
    • -e Enumeration
      You may generate enumeration or string literal Example:
    // enumeration (with -e option) 
    export interface IOrder {
        payment: IOrderPayment;
    export enum IOrderPayment {
        card = "card",
        check = "check",
    // OR string literal types (by default)
    export interface IOrder {
        payment: "card" | "check";
    • -c Advanced configuration
      path to configuration file

    Advanced configuration


     * @type {import('strapi-to-typescript')}
    const config = {
        input: [
        components: './components/',
        output: './sts/',
        // optional
        enum: true,
        nested: false,
        excludeField: (interfaceName, fieldName) => fieldName === 'hide_field',
        addField: (interfaceName) => [{ name: "created_by", type: "string" }],
        // optional, builtin function used if undefined return
        fieldType: (fieldType, fieldName, interfaceName) => { if(fieldType == 'datetime') return 'string' },
        fieldName: (fieldName) => fieldName.replace('_', ''),
        interfaceName: (name) => `X${name}`,
        enumName: (name, interfaceName) => `Enum${interfaceName}${name}`,
        importAsType: (interfaceName) => interfaceName === 'MyInterfaceThatWantsToImportAsTypes' /* or just true */,
        outputFileName: (interfaceName, filename) => interfaceName;
    module.exports = config;


      "//" : "...",
      "scripts": {
        "sts": "sts -c .stsconfig"
      "///" : "..."


    If you want to create an issue. First of all, be nice. Take the time to explain and format your post.

    The better solution to explain your issue (and for me, to fix it) is to create a pull request with your data:

    1. fork this repo with the button "fork" on github website. wait a minute.
    2. git clone your master branch from the newly created repository.
    3. yarn install or npm install
    4. add your api in src/test/api src/test/components (if necessary)
    5. add your test:
    6. src/test/test<issue id>.config.js copy an other test and modify output conf
    7. src/test/test<issue id>.assert.ts copy another assert and modify the import accordingly to your conf output
    8. run your test with ./node_modules/.bin/ts-node src/test.ts test<issue id> or run all test yarn test
    9. create pull request on this repo


    The input folder is recursively processed and each model file is read. When done, the expected output folder is generated, and finally, the Strapi models are converted to TypeScript.


    npm install && npm run build
    # output files generated in dist folder


    npm i strapi-to-typescript

    DownloadsWeekly Downloads






    Unpacked Size

    80.5 kB

    Total Files


    Last publish


    • erikvullings
    • anthonyperron