Type Safe 
Gunshi provides excellent TypeScript support, allowing you to create type-safe command-line interfaces. The define function is the recommended way to leverage TypeScript with Gunshi for the best developer experience and code reliability.
Benefits of Type Safety 
Using TypeScript with Gunshi offers several advantages:
- Autocompletion: Get IDE suggestions for command options and properties
 - Error prevention: Catch type-related errors at compile time
 - Better documentation: Types serve as documentation for your code
 - Refactoring confidence: Make changes with the safety net of type checking
 
Using define for Type Safety 
The define function automatically infers types from your command definition, providing autocompletion and compile-time checks without explicit type annotations.
Here's how to use define:
ts
import { cli, define } from 'gunshi'
// Define a command using the `define` function
const command = define({
  name: 'greet',
  options: {
    // Define a string option 'name' with a short alias 'n'
    name: {
      type: 'string',
      short: 'n',
      description: 'Your name'
    },
    // Define a number option 'age' with a default value
    age: {
      type: 'number',
      short: 'a',
      description: 'Your age',
      default: 30
    },
    // Define a boolean flag 'verbose'
    verbose: {
      type: 'boolean',
      short: 'v',
      description: 'Enable verbose output'
    }
  },
  // The 'ctx' parameter is automatically typed based on the options
  run: ctx => {
    // `ctx.values` is fully typed!
    const { name, age, verbose } = ctx.values
    // TypeScript knows the types:
    // - name: string | undefined
    // - age: number (because it has a default)
    // - verbose: boolean | undefined
    let greeting = `Hello, ${name || 'stranger'}!`
    if (age !== undefined) {
      greeting += ` You are ${age} years old.`
    }
    console.log(greeting)
    if (verbose) {
      console.log('Verbose mode enabled.')
      console.log('Parsed values:', ctx.values)
    }
  }
})
// Execute the command
await cli(process.argv.slice(2), command)With define:
- You don't need to import types like 
CommandorCommandContext. - The 
ctxparameter in therunfunction automatically gets the correct type, derived from theoptionsdefinition. - Accessing 
ctx.values.optionNameprovides type safety and autocompletion based on the option'stypeand whether it has adefault.- Options without a 
defaultare typed asT | undefined. - Options with a 
defaultare typed asT. - Boolean flags are 
boolean | undefinedunless they have adefault: false. 
 - Options without a 
 
This approach significantly simplifies creating type-safe CLIs with Gunshi.
