# Script.Parameters

Scripts can be parameterized using a leading context object, where each key is a referable type name. This can be used to pass exterior types into Script.

### Parameters

The following creates a nullable string by passing an exterior string into the Script.

    const T = Type.String()

    const S = Type.Script({ T }, `T | null`)            // const S: TUnion<[
                                                        //   TString,
                                                        //   TNull
                                                        // ]>

Multiple exterior types can be passed via the context object.

    const A = Type.Literal(1)
    const B = Type.Literal(2)
    const C = Type.Literal(3)

    const T = Type.Script({ A, B, C }, `[A, B, C]`)     // const T: TTuple<[
                                                        //   TLiteral<1>,
                                                        //   TLiteral<2>,
                                                        //   TLiteral<3>
                                                        // ]>

### Module Dependencies

Script modules can be passed as the context for other modules, allowing type definitions to be shared across dependent modules.

    import Type from 'typebox'

    const Math = Type.Script(`
      type Vector4 = { x: number, y: number, z: number, w: number }
      type Vector3 = { x: number, y: number, z: number }
      type Vector2 = { x: number, y: number }
    `)

    const Graphics = Type.Script(Math, `
      type Vertex = {
        position: Vector4,
        normal: Vector3,
        uv: Vector2
      }
      type Geometry = {
        vertices: Vertex[],
        indices: number[]
      }
      type Material = {
        ambient: Vector4,
        diffuse: Vector4,
        specular: Vector4,
      }
      type Mesh = {
        geometry: Geometry
        material: Material
      }
    `)

    type Mesh = Type.Static<typeof Graphics['Mesh']>     // type Mesh = {
                                                         //   geometry: { ... },
                                                         //   material: { ... }
                                                         // }