Create TypeScript interfaces from Kotlinx Serialization classes.
@Serializable
data class PlayerDetails(
val name: String,
val health: Float,
)
println(
KxsTsGenerator().generate(Color.serializer())
)interface PlayerDetails {
name: string;
health: number;
}The aim is to create TypeScript interfaces that can accurately produce Kotlinx Serialization compatible JSON.
The Kotlinx Serialization API should be used to generate TypeScript. The
SerialDescriptors
are flexible and comprehensive enough to allow for accurate TypeScript code, without any deviation.
See the docs for working examples.
This is a proof-of-concept.
| Status | Notes | |
|---|---|---|
| Kotlin multiplatform | ❓ | The codebase is multiplatform, but only JVM has been tested |
@SerialName |
✅/⚠ | The serial name is directly converted and might produce invalid TypeScript |
| Basic classes | ✅ example | |
| Nullable and default-value properties | ✅ example | |
| Value classes | ✅ example | |
| Enums | ✅ example | |
| Lists | ✅ example | |
| Maps | ✅/⚠ example | Maps with complex keys are converted to an ES6 Map, see |
| Polymorphism - Sealed classes | ✅/⚠ example | Nested sealed classes are ignored, see |
| Polymorphism - Open classes | ❌ example | Not implemented. Converted to type MyClass = any |
@JsonClassDiscriminator |
❌ | Not implemented |
| Edge cases - circular dependencies | ✅ example |