# TypeScript Feature Reference
Source: https://speakeasy.com/docs/sdks/languages/typescript/feature-support

import { Table } from "@/mdx/components";



## Authentication

<Table 
  data={[
    { name: "HTTP Basic", support: "✅", docs: "Docs", notes: "" },
    { name: "API Key (bearer, header, cookie, query)", support: "✅", docs: "Docs", notes: "" },
    { name: "OAuth implicit flow", support: "✅", docs: "Docs", notes: "" },
    { name: "OAuth refresh token flow", support: "✅ using security callbacks", docs: "Docs", notes: "" },
    { name: "OAuth client credentials flow", support: "✅ using hooks", docs: "Docs", notes: "" },
    { name: "OAuth resource owner password flow", support: "✅", docs: "Docs", notes: "" },
    { name: "mTLS", support: "🏗️ Partial", docs: "Docs", notes: "" }
  ]}
  columns={[
    { key: "name", header: "Name" },
    { key: "support", header: "Support" },
    { key: "docs", header: "Docs" },
    { key: "notes", header: "Notes" }
  ]}
/>

## Server Configuration

<Table 
  data={[
    { name: "URL Templating", support: "✅", docs: "[defining `variables`](/docs/customize-sdks/servers#use-templated-urls)", notes: "" },
    { name: "Multiple server", support: "✅", docs: "[`x-speakeasy-server-id` extension](/docs/customize-sdks/servers#declare-multiple-servers)", notes: "" },
    { name: "Describe server outside your spec", support: "✅", docs: "[`serverUrl` config](/docs/customize-sdks/servers#declare-base-server-url)", notes: "" }
  ]}
  columns={[
    { key: "name", header: "Name" },
    { key: "support", header: "Support" },
    { key: "docs", header: "Docs" },
    { key: "notes", header: "Notes" }
  ]}
/>

## Data Types

### Basic Types

<Table 
  data={[
    { name: "Numbers", support: "✅", docs: "[data-types](https://swagger.io/docs/specification/data-models/data-types/#numbers)", notes: "`float`, `double`, `int32`, `int64`" },
    { name: "Strings", support: "✅", docs: "[data-types](https://swagger.io/docs/specification/data-models/data-types/#strings)", notes: "" },
    { name: "Date Time", support: "✅", docs: "[data-types](https://swagger.io/docs/specification/data-models/data-types/#date-time)", notes: "" },
    { name: "Boolean", support: "✅", docs: "[data-types](https://swagger.io/docs/specification/data-models/data-types/#booleans)", notes: "" },
    { name: "Binary", support: "✅", docs: "[data-types](https://swagger.io/docs/specification/data-models/data-types/#binary)", notes: "" },
    { name: "Enums", support: "✅", docs: "[data-types](https://swagger.io/docs/specification/data-models/data-types/#enumerations)", notes: "" },
    { name: "Arrays", support: "✅", docs: "[data-types](https://swagger.io/docs/specification/data-models/data-types/#arrays)", notes: "" },
    { name: "Maps", support: "✅", docs: "[data-types](https://swagger.io/docs/specification/data-models/data-types/#maps)", notes: "" },
    { name: "Objects", support: "✅", docs: "[data-types](https://swagger.io/docs/specification/data-models/data-types/#objects)", notes: "" },
    { name: "Any", support: "✅", docs: "[data-types](https://swagger.io/docs/specification/data-models/data-types/#any)", notes: "" },
    { name: "Null", support: "✅", docs: "[data-types](https://swagger.io/docs/specification/data-models/data-types/#nil)", notes: "" }
  ]}
  columns={[
    { key: "name", header: "Name" },
    { key: "support", header: "Support" },
    { key: "docs", header: "Docs" },
    { key: "notes", header: "Notes" }
  ]}
/>

### Polymorphism

<Table 
  data={[
    { name: "Union Types", support: "✅", docs: "[Using `oneOf`](https://swagger.io/docs/specification/data-models/oneof-anyof-allof-not/#oneof)", notes: "`anyOf` is treated as `oneOf` and will create a union type object." },
    { name: "Intersection Types", support: "🏗️ Partial", docs: "[Using `allOf`](https://swagger.io/docs/specification/data-models/oneof-anyof-allof-not/#allof)", notes: "" }
  ]}
  columns={[
    { key: "name", header: "Name" },
    { key: "support", header: "Support" },
    { key: "docs", header: "Docs" },
    { key: "notes", header: "Notes" }
  ]}
/>

## Methods

<Table 
  data={[
    { name: "Namespacing", support: "✅", docs: "[grouping operations](/docs/customize-sdks/namespaces)", notes: "" },
    { name: "Multi-level Namespacing", support: "✅", docs: "[multi-level grouping](/docs/customize-sdks/namespaces#define-multi-level-namespaces)", notes: "" },
    { name: "Custom naming", support: "✅", docs: "[`x-speakeasy-name-override` extension](/docs/customize-sdks/methods#change-method-names)", notes: "" },
    { name: "Exclude Methods", support: "✅", docs: "[`x-speakeasy-ignore` extension](/docs/customize-sdks/methods#exclude-methods-from-sdk)", notes: "" },
    { name: "Deprecation", support: "✅", docs: "the [`deprecate` flag](/docs/customize-sdks/methods#deprecate-methods)", notes: "" }
  ]}
  columns={[
    { key: "name", header: "Name" },
    { key: "support", header: "Support" },
    { key: "docs", header: "Docs" },
    { key: "notes", header: "Notes" }
  ]}
/>

## Parameters

<Table 
  data={[
    { name: "Pass Inline", support: "✅", docs: "[flattening parameters](/docs/customize-sdks/methods#configuring-method-signatures)", notes: "" },
    { name: "Pass via Request Object", support: "✅", docs: "[request object](/docs/customize-sdks/methods#configuring-method-signatures)", notes: "" },
    { name: "Exclude Parameters", support: "✅", docs: "[`x-speakeasy-ignore` extension](/docs/customize-sdks/methods#exclude-parameters-from-signatures)", notes: "" },
    { name: "Deprecate Parameters", support: "✅", docs: "the [`deprecate` flag](/docs/customize-sdks/deprecations#deprecate-parameters)", notes: "" },
    { name: "Define globally", support: "✅", docs: "[global parameters](/docs/customize-sdks/globals)", notes: "" }
  ]}
  columns={[
    { key: "name", header: "Name" },
    { key: "support", header: "Support" },
    { key: "docs", header: "Docs" },
    { key: "notes", header: "Notes" }
  ]}
/>

### Path Parameters Serialization

<Table 
  data={[
    { name: "Default (style = simple, explode = false)", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#path/)", notes: "" },
    { name: "Basic types", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#path/)", notes: "" },
    { name: "Simple objects", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#path/)", notes: "" },
    { name: "`label` & `matrix`", support: "❌", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#path/)", notes: "" }
  ]}
  columns={[
    { key: "name", header: "Name" },
    { key: "support", header: "Support" },
    { key: "docs", header: "Docs" },
    { key: "notes", header: "Notes" }
  ]}
/>

### Query Parameters Serialization

<Table 
  data={[
    { name: "`json`", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#query/)", notes: "" },
    { name: "`form`", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#query/)", notes: "" },
    { name: "`spaceDelimited`", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#query/)", notes: "" },
    { name: "`pipeDelimited`", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#query/)", notes: "" },
    { name: "`deepObject`", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#query/)", notes: "" },
    { name: "Basic types", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#query/)", notes: "" },
    { name: "Simple objects", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#query/)", notes: "" }
  ]}
  columns={[
    { key: "name", header: "Name" },
    { key: "support", header: "Support" },
    { key: "docs", header: "Docs" },
    { key: "notes", header: "Notes" }
  ]}
/>

## Requests

<Table 
  data={[
    { name: "Request headers", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#header/)", notes: "" },
    { name: "Request retries", support: "✅", docs: "[retries](/docs/customize-sdks/retries)", notes: "" },
    { name: "`json`", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#request-body/)", notes: "Both `application/json` and `text/json`" },
    { name: "form data", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#request-body/)", notes: "" },
    { name: "binary", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#request-body/)", notes: "" },
    { name: "raw byte", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#request-body/)", notes: "" },
    { name: "plain text", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#request-body/)", notes: "" },
    { name: "`x-www-form-urlencoded`", support: "🏗️ Partial", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#request-body/)", notes: "Including encoding, but not non-object types" },
    { name: "XML", support: "❌", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#request-body/)", notes: "" },
    { name: "Other media types", support: "❌", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#request-body/)", notes: "" }
  ]}
  columns={[
    { key: "name", header: "Name" },
    { key: "support", header: "Support" },
    { key: "docs", header: "Docs" },
    { key: "notes", header: "Notes" }
  ]}
/>

## Responses

<Table 
  data={[
    { name: "Pagination", support: "✅", docs: "[`x-speakeasy-pagination` extension](/docs/customize-sdks/pagination)", notes: "" },
    { name: "Custom Errors", support: "✅", docs: "[`x-speakeasy-errors` extension](/docs/customize-sdks/errors)", notes: "" },
    { name: "json", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#response/)", notes: "" },
    { name: "plain text", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#response/)", notes: "" },
    { name: "binary", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#response/)", notes: "" },
    { name: "raw byte", support: "✅", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#response/)", notes: "" },
    { name: "XML", support: "❌", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#response/)", notes: "" },
    { name: "Other media types", support: "❌", docs: "[Swagger Docs](https://swagger.io/docs/specification/serialization/#response/)", notes: "" }
  ]}
  columns={[
    { key: "name", header: "Name" },
    { key: "support", header: "Support" },
    { key: "docs", header: "Docs" },
    { key: "notes", header: "Notes" }
  ]}
/>

## Documentation

<Table 
  data={[
    { name: "`README` generation", support: "✅", docs: "[README generation](/docs/customize-sdks/sdk-docs)", notes: "" },
    { name: "Usage Snippet generation", support: "✅", docs: "[snippet generation](/docs/customize-sdks/sdk-docs#usage-examples)", notes: "" },
    { name: "Documentation generation", support: "✅", docs: "[documentation generation](/docs/customize-sdks/sdk-docs)", notes: "" }
  ]}
  columns={[
    { key: "name", header: "Name" },
    { key: "support", header: "Support" },
    { key: "docs", header: "Docs" },
    { key: "notes", header: "Notes" }
  ]}
/>