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.

Example

from petit_ts import T
store = TSTypeStore()


class Jeb(Enum):
    A = 'R'

UserType = NamedLiteral('admin', 'user')

TestUnion = NamedUnion(str, int)

class CreateUserDto(BaseModel):
    username: str
    password: Union[str, Jeb]
    role: UserType
    jeb: TestUnion

store.add_type(CreateUserDto)

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

# 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

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


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 !

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.3.tar.gz (12.0 kB view details)

Uploaded Source

Built Distribution

petit_ts-0.1.3-py2.py3-none-any.whl (13.3 kB view details)

Uploaded Python 2 Python 3

File details

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

File metadata

  • Download URL: petit_ts-0.1.3.tar.gz
  • Upload date:
  • Size: 12.0 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.3.tar.gz
Algorithm Hash digest
SHA256 d60e53703bec01c2dd909f1e0ffb3a6b8f49bd2f73b2a3ba5c7c142406a762ed
MD5 3d40abfd4690f34d788efa6d5912fe6b
BLAKE2b-256 8125ae82fcf9b0e709235f233e2877b0918997349aa38732e0882de5980eb178

See more details on using hashes here.

File details

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

File metadata

  • Download URL: petit_ts-0.1.3-py2.py3-none-any.whl
  • Upload date:
  • Size: 13.3 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.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 cdde79df8a76b8928e180f1e19b3b768afbc52668e95b95064fc0ba3012b396d
MD5 80774ff60e4d877f7af1d42bc084f3a8
BLAKE2b-256 34c55f2ac7c896e77b5b24ab62875a13f00e1b161b9fec51781e7e3b15215695

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