# FunctionDeclaration

A TypeScript function declaration.

* jsx

  ```tsx
  import { FunctionDeclaration } from "@alloy-js/typescript";


  <FunctionDeclaration
    async
    parameters={ParameterDescriptor[] | string[]}
    parametersChildren={Children}
    returnType={Children}
    typeParameters={TypeParameterDescriptor[] | string[]}
    typeParametersChildren={Children}
  >
    {children}
  </FunctionDeclaration>
  ```

* stc

  ```ts
  import { FunctionDeclaration } from "@alloy-js/typescript/stc";


  FunctionDeclaration({
    async: boolean,
    parameters: ParameterDescriptor[] | string[],
    parametersChildren: Children,
    returnType: Children,
    typeParameters: TypeParameterDescriptor[] | string[],
    typeParametersChildren: Children,
  }).children(children)
  ```

## Props

|                        |                                                                                         |                                                                                                                                                                                                                                       |
| ---------------------- | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| async                  | optional boolean                                                                        |                                                                                                                                                                                                                                       |
| children               | optional[Children](../../../core/types/children/)                                       |                                                                                                                                                                                                                                       |
| parameters             | optional[ParameterDescriptor](../../types/parameterdescriptor/)\[] \| string\[]         | The parameters to the function. Can be an array of strings for parameters which don’t have a type or a default value. Otherwise, it’s an array of [ParameterDescriptor](../../types/parameterdescriptor/)s.                           |
| parametersChildren     | optional[Children](../../../core/types/children/)                                       | Raw content to be used as the parameter list.                                                                                                                                                                                         |
| returnType             | optional[Children](../../../core/types/children/)                                       | The return type of the function.                                                                                                                                                                                                      |
| typeParameters         | optional[TypeParameterDescriptor](../../types/typeparameterdescriptor/)\[] \| string\[] | The type parameters for the function. Can be an array of strings for type parameters which don’t have any constraints or a default type, otherwise it’s an array of [TypeParameterDescriptor](../../types/typeparameterdescriptor/)s. |
| typeParametersChildren | optional[Children](../../../core/types/children/)                                       | Raw content to be used as the type parameter list.                                                                                                                                                                                    |

## Remarks

Providing parameters and type parameters can be accomplished in one of three ways:

1. As an array of [ParameterDescriptor](../../types/parameterdescriptor/)s or [TypeParameterDescriptor](../../types/typeparameterdescriptor/)s. 2. As raw content via the `parametersChildren` or `typeParametersChildren` props. 3. As a child of this component via the \[unresolved link] or \[unresolved link] components.
