congratulations, you've taken a well-documented version of an abstraction about web components and turned it into an undocumented version of an abstraction about web components without adding anything useful to the expression language. W0W.
We've switched to Typescript for our React projects because we've found it's the sweet spot between developer perks (type checking, static analysis, intellisense, inline lint errors) and abstraction of the actual code running in production. It's also a lot less of a readjustment to make if you need to dive into the transpiled source to track down a subtle or unusual bug.
Kotlin is rather literal in it's translation. Arrays are mapped to arrays, interfaces are mapped to objects.
Plus you can use plain javascript anywhere in your code:
val p: MyTypedObject = js("new require('something.js').default")
val other: MyTypedObject
js("Object.assign(other, p")
Or you write wrappers which do what you think they do: @JsModule("react")
external object React {
fun createElement(name: String, props: dynamic, vararg children: dynamic): ReactElement
interface ReactElement {}
}
It's definitely necessary to understand both languages though.What the guy did was create another DSL over React's API. (JSX is another DSL)