Skip to main content

Edge cases

Demonstrations of how edge cases are handled.

Recursive references

A references B which references A which references B... should be handled properly

Classes

@Serializable
class A(val b: B)

@Serializable
class B(val a: A)

fun main() {
val tsGenerator = KxsTsGenerator()
println(tsGenerator.generate(A.serializer(), B.serializer()))
}

You can get the full code here.

export interface A {
b: B;
}

export interface B {
a: A;
}

Lists

@Serializable
class A(
val list: List<B>
)

@Serializable
class B(
val list: List<A>
)

fun main() {
val tsGenerator = KxsTsGenerator()
println(tsGenerator.generate(A.serializer(), B.serializer()))
}

You can get the full code here.

export interface A {
list: B[];
}

export interface B {
list: A[];
}

Map

@Serializable
class A(
val map: Map<String, B>
)

@Serializable
class B(
val map: Map<String, A>
)

fun main() {
val tsGenerator = KxsTsGenerator()
println(tsGenerator.generate(A.serializer(), B.serializer()))
}

You can get the full code here.

export interface A {
map: { [key: string]: B };
}

export interface B {
map: { [key: string]: A };
}