# Overview

Learn how to define typed parameters for templates.

Templates accept typed parameters called options. When a user applies a template, the CLI prompts for any required options that were not provided.

## Definition

Options are defined as named entries under the [`options`](/reference/cli/templates/structure#options-prop) property:

```json5
"options": {
  "name": {
    "type": "string",
    "description": "The project name.",
    "default": "my-app"
  },
  "typescript": {
    "type": "boolean",
    "description": "Whether to use TypeScript.",
    "default": true
  }
}
```

Option values are accessible in [expressions](/reference/cli/templates/expressions) through the `options` variable. For example, `${options.name}`.

## Properties

The following list describes the properties common to all option types:

- `type`: `string`

  The option type. One of [`string`](/reference/cli/templates/options/types/string), [`boolean`](/reference/cli/templates/options/types/boolean), [`number`](/reference/cli/templates/options/types/number), [`array`](/reference/cli/templates/options/types/array), or [`reference`](/reference/cli/templates/options/types/reference).

- `description`: `string`

  A description displayed when prompting the user.

- `default`: `any` (optional)

  The default value used when the user does not provide one.

## Explore

- [Template structure](/reference/cli/templates/structure): Learn about the template file format.
- [Use](/reference/cli/commands/use): Learn how to apply a template to your project.
