Dead simple way to define shared type definitions between applications
Project description
TypeBuf
Dead simple way to create shared type definitions between applications
- Other tools have too much setup? Too much boilerplate? Do too much "magic"? Just:
- Define your Types in
types.yaml
- Run TypeBuf:
$ typebuf compile -f types.yaml -l python -l typescript
- Define your Types in
Install
pip install typebuf
poetry add --dev typebuf
Quickstart
-
Create a file called
types.yaml
, it can be anywhere in your project repo -
Add the following lines to the newly created file:
---
typedefs:
- typename: User
imports:
python:
- 'from typing import Optional'
fields:
- name: first_name
type: string
- name: age
type: int
optional: true
-
Now call TypeBuf with:
$ typebuf compile -l python -l typescript
-
You now have two new files, one called
user.py
and one calleduser.ts
that can you use for things like data serialization/deserialization, validation, subclassing, etc
Generated Python:
"""
User type definition file generated by TypeBuf
Note: Any changes made to this file will be overwritten
during next compilation
"""
from typing import Optional
class User:
first_name: str
age: Optional[int]
Generated TypeScript:
/**
* User type definition file generated by TypeBuf
* Note: Any changes made to this file will be overwritten
* during next compilation
*/
interface User {
first_name: string;
age?: number;
}
Note: So far only Python and TypeScript are supported. More languages coming soon!
Demo
Here's a quick demo of me using TypeBuf 0.1.1. First I show the contents of the types.yaml file then I generate Python and TypeScript source code and show the contents of the new files
Documentation
-
Inside types.yaml there is an array called
typedefs
. This is where you add your shared type definitions -
Each type can have the following fields (required fields in bold):
- typename: string
- imports: map[string, array[str]]
- fields: array[Field]
- A
Field
has the following attributes:- name: string
- type: string
- optional: boolean
- A
-
In a type definition you can also specify custom/required imports for any depedencies your classes may need:
-
typedefs: - typename: Address imports: python: - 'from mymodule.user import User' - 'from typing import Optional' typescript: - 'import { User } from "./User";' fields: - ...,
-
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.