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
Release history Release notifications | RSS feed
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)
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9d1159c6cc85fa7d46a3938c493726d9e39ed044b3c05f4573f73eea9950e6fe |
|
MD5 | 005fdcd20fd3b0e8fd9827f6cde143bb |
|
BLAKE2b-256 | d115e459857fc3ae3ebfde19fbc3a5ba0ec0dd46765130b75b9a15495bd00ca6 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 33d1130a0d421e2d8384763cf359a91687913701f399307126b7a2de341e7509 |
|
MD5 | 5b3abc84a74992dff145fd0ba43c6705 |
|
BLAKE2b-256 | d986e3d26e2bab0c654d5f621f1a9df2caf954837ed4f4a75a4b151a1bb5af67 |