Skip to main content

Package for generating TypeScript types from DRF serializers

Project description

DRF Typescript generator

This package allows you to generate typescript types / interfaces for Django REST framework serializers, which can be then simply used in frontend applications.

Setup

Install the package with your preferred dependency management tool:

$ poetry add drf-typescript-generator

Add drf_typescript_generator to INSTALLED_APPS in your django settings.py file:

INSTALLED_APPS = [
    ...
    'drf_typescript_generator',
    ...
]

Usage

To generate types run django management command generate_types with the names of django apps you want the script to look for serializers in:

$ python manage.py generate_types my_app

Example serializer found in my_app:

class MySerializer(serializers.Serializer):
    some_string = serializers.CharField(max_length=100)
    some_number = serializers.IntegerField()
    some_boolean = serializers.BooleanField()
    choice = serializers.ChoiceField(
        choices=[1, 2, 3],
        allow_null=True
    )
    multichoice = serializers.MultipleChoiceField(
        choices=[2, 3, 5]
    )

Generated typescript type:

export type MySerializer = {
  choice: 1 | 2 | 3 | null
  multichoice: (2 | 3 | 5)[]
  someBoolean: boolean
  someNumber: number
  someString: string
}

The script looks for DRF routers in project urls.py file as well as urls.py files in given apps and extracts serializers based on viewsets defined in those routers.

Arguments

The generate_types command supports following arguments:

Argument Value type Description Default value
--format "type" | "interface" Whether to output typescript types or interfaces "type"
--semicolons boolean If the argument is present semicolons will be added in output False
--spaces int Output indentation will use given number of spaces (mutually exclusive with --tabs). Spaces are used if neither --spaces nor --tabs argument is present. 2
--tabs int Output indentation will use given number of tabs (mutually exclusive with --spaces) None

Features

The package currently supports following features that are correctly transformed to typescript syntax:

  • Basic serializers
  • Model serializers
  • Nested serializers
  • Method fields (typed with correct type if python type hints are used)
  • Required / optional fields
  • List fields
  • Choice and multiple choice fields (results in composite typescript type)
  • allow_blank, allow_null (results in composite typescript type)

More features are planned to add later on:

  • One to many and many to many fields correct typing
  • Differentiate between read / write only fields while generating type / interface
  • Integration with tools like drf_yasg to allow downloading the generated type from the documentation of the API
  • Accept custom mappings

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

drf-typescript-generator-0.1.1.tar.gz (6.9 kB view hashes)

Uploaded Source

Built Distribution

drf_typescript_generator-0.1.1-py3-none-any.whl (7.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page