Potentially being able to shaketree is cool, but requiring extend(...) is a bit of a PITA.
Maybe we should think of a slightly different API.
Using T directly
you bail out of tree-shaking THREE, you can still extend with extend() but you are in it for the full ride in regards to loading THREE
import { T } from "solid-three"
return <T.Mesh/>
IIRC it is possible right now to extend the types via global declaration, so that you can type <T.CustomGuy/>
This would probably still be necessary if we want to support extending the global T.
We could also decide to have T be the easy-way, not allow extending it and just keep it as a wrapper around THREE.
If you want to extend what T can represent you will have to do export const { T } = createT({ ...THREE, NewGuy(...){...} }) like 👇
Using custom T via createT
You only load the subset that you pass in, either via its arguments.
createT would return { T, extend } allowing you to extend the proxy further.
import { createT } from "solid-three"
import { Mesh } from "three"
export const { T, extend } = createT({ Mesh })
Nice thing is then the types are scoped too, and are automatically inferred via the arguments.
Maybe we could have an additional generic for the extending types:
// index.ts
import { createT } from "solid-three"
import { Mesh } from "three"
export const { T, extend } = createT<{ MeshBasicMaterial }>({ Mesh })
// somewhere-else.ts
import { Mesh } from "three"
import { extend } from "./index.ts"
extend({ MeshBasicMaterial })
Potentially being able to shaketree is cool, but requiring
extend(...)is a bit of a PITA.Maybe we should think of a slightly different API.
Using T directly
you bail out of tree-shaking
THREE, you can still extend withextend()but you are in it for the full ride in regards to loadingTHREEIIRC it is possible right now to extend the types via global declaration, so that you can type
<T.CustomGuy/>This would probably still be necessary if we want to support extending the global
T.We could also decide to have T be the easy-way, not allow extending it and just keep it as a wrapper around THREE.
If you want to extend what T can represent you will have to do
export const { T } = createT({ ...THREE, NewGuy(...){...} })like 👇Using custom T via createT
You only load the subset that you pass in, either via its arguments.
createTwould return{ T, extend }allowing you to extend the proxy further.Nice thing is then the types are scoped too, and are automatically inferred via the arguments.
Maybe we could have an additional generic for the extending types: