Skip to main content

Convert your python types to typescript

Project description

Petit ts

A Library to easly convert your python types to typescript types.

It's a part of the petite_stack (not released yet, as not mature enough).

Example

from petit_ts import TSTypeStore, Name

store = TSTypeStore()


class Jeb(Enum):
    A = 'R'


# if you want an union to be named and not inlined
UserType = Named(Literal['admin', 'user'])

TestUnion = Named(Union[str, int])

class CreateUserDto(BaseModel):
    username: str
    # will be inlined
    password: Union[str, Jeb]
    # won't be inlined
    role: UserType
    # won't be inlined
    jeb: TestUnion

store.add_type(CreateUserDto)

res = store.get_repr(CreateUserDto)
print(res)
# >>> "CreateUserDto"

# Here you notice that we have the name instead of the body, so that you can use it
# in another function easly

# here we need to do this in order, to get all the required deps into our ts file
not_inlined = store.get_all_not_inlined()
print(not_inlined)
# >>> "type CreateUserDto  = {
# 	username: string;
# 	password: string | Jeb;
# 	role: UserType;
# 	jeb: TestUnion;
# };
# export enum Jeb {
# 	A = "R",
# };
# type UserType = "admin" | "user";
# type TestUnion = string | number /*int*/"

with open('res.ts', 'w') as f :
    # write what you need to the file
    final = f'export a = function (a: any): {store.get_repr(CreateUserDto)};'
    final += store.get_all_not_inlined()
    f.write(final)

Supported types:

  • None
  • bool
  • str
  • int
  • float
  • Dict[K, V]
  • List[T]
  • List, list
  • Dict, dict
  • @dataclass, generic @dataclass
  • Optional[T]
  • Union[A, B, ...], Named(Union[A, B, ...])
  • Literal[values], Named(Literal[1, 2, '3']) with values = Union[int, str]

Add support for a custom type

Example for the BaseModel type:

from typing import Tuple, Optional, Dict, Any, get_type_hints
from petit_ts import ClassHandler, TSTypeStore
from pydantic import BaseModel

store = TSTypeStore()

class BaseModelHandler(ClassHandler):
    @staticmethod
    def is_mapping() -> bool:
        return True

    @staticmethod
    def should_handle(cls, store, origin, args) -> bool:
        return issubclass(cls, BaseModel)

    @staticmethod
    def build(cls: BaseModel, store, origin, args) -> Tuple[Optional[str], Dict[str, Any]]:
        name = cls.__name__
        fields = get_type_hints(cls)
        return name, fields


store.add_class_handler(BaseModelHandler)

You have to implement for the ClassHandler:

  • is_mapping
  • should_handle
  • build

If this is a mapping, you should return the fields, a Dict[str, Any] else you should return a string

For the BasicHandler :

  • build
  • should_handle

If you have any problem, don't hesitate to open an issue on github !

Next steps :

  • Add support :

    • Tuples[...]
    • NamedTuple[...]
  • Handle abstract types

  • Choose between interface and type

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

petit_ts-0.1.6.tar.gz (12.8 kB view details)

Uploaded Source

Built Distribution

petit_ts-0.1.6-py2.py3-none-any.whl (14.0 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file petit_ts-0.1.6.tar.gz.

File metadata

  • Download URL: petit_ts-0.1.6.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6

File hashes

Hashes for petit_ts-0.1.6.tar.gz
Algorithm Hash digest
SHA256 9d1159c6cc85fa7d46a3938c493726d9e39ed044b3c05f4573f73eea9950e6fe
MD5 005fdcd20fd3b0e8fd9827f6cde143bb
BLAKE2b-256 d115e459857fc3ae3ebfde19fbc3a5ba0ec0dd46765130b75b9a15495bd00ca6

See more details on using hashes here.

File details

Details for the file petit_ts-0.1.6-py2.py3-none-any.whl.

File metadata

  • Download URL: petit_ts-0.1.6-py2.py3-none-any.whl
  • Upload date:
  • Size: 14.0 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6

File hashes

Hashes for petit_ts-0.1.6-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 33d1130a0d421e2d8384763cf359a91687913701f399307126b7a2de341e7509
MD5 5b3abc84a74992dff145fd0ba43c6705
BLAKE2b-256 d986e3d26e2bab0c654d5f621f1a9df2caf954837ed4f4a75a4b151a1bb5af67

See more details on using hashes here.

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