> ## Documentation Index
> Fetch the complete documentation index at: https://docs.syntblaze.com/llms.txt
> Use this file to discover all available pages before exploring further.

# TypeScript Function Expression

A function expression in TypeScript defines a function as part of a larger expression syntax, typically by assigning an anonymous or named function to a variable. TypeScript enhances standard JavaScript function expressions by enforcing strict static typing on parameters, return values, and the overall function signature.

Unlike function declarations, function expressions are not hoisted; they are evaluated at runtime when the execution thread reaches the assignment.

## Syntax Visualization

Function expressions can be written using the `function` keyword or as arrow functions. TypeScript allows you to annotate the parameters and the return type directly within the expression.

```typescript theme={"dark"}
// Standard function expression with inline type annotations
const add = function(x: number, y: number): number {
    return x + y;
};

// Arrow function expression with inline type annotations
const subtract = (x: number, y: number): number => {
    return x - y;
};
```

## Function Type Expressions (Variable Typing)

In TypeScript, you can decouple the type signature from the function implementation by explicitly typing the variable that holds the function expression. The syntax for a function type expression uses an arrow `=>` to separate the parameter list from the return type.

```typescript theme={"dark"}
// Variable explicitly typed with a function type signature
const multiply: (a: number, b: number) => number = function(x, y) {
    return x * y;
};
```

## Contextual Typing (Type Inference)

When a function expression is assigned to a variable that already has a declared function type, TypeScript applies **contextual typing**. The TypeScript compiler infers the types of the parameters and the return value of the function expression based on the variable's type signature, making inline annotations redundant.

```typescript theme={"dark"}
type MathOperation = (a: number, b: number) => number;

// Parameter types (x, y) and return type are inferred from MathOperation
const divide: MathOperation = (x, y) => {
    return x / y; 
};
```

## Named Function Expressions

While function expressions are typically anonymous, they can be assigned an internal identifier. This name is local only to the function body itself and is strictly used for internal recursion or identifying the function within stack traces.

```typescript theme={"dark"}
const calculateFactorial = function factorial(n: number): number {
    if (n <= 1) return 1;
    // 'factorial' is accessible here, but not outside the expression
    return n * factorial(n - 1); 
};
```

<div
  style={{ 
display: "flex", 
justifyContent: "space-between", 
alignItems: "center", 
maxWidth: "754px", 
padding: "1rem 0",
marginBottom: "24px"
}}
>
  <span style={{ fontWeight: "bold", fontSize: "1.25rem", color: "var(--tw-prose-headings)", fontFamily: "Inter, ui-sans-serif, system-ui, sans-serif" }}>Tired of Poor TypeScript Skills? Fix That With Deep Grasping!</span>

  <a
    href="https://syntblaze.com"
    target="_blank"
    style={{ 
  marginLeft: "24px",
  textDecoration: "none", 
  backgroundColor: "#007AFF",
  color: "#ffffff", 
  padding: "6px 16px", 
  borderRadius: "16px",
  fontSize: "0.9rem",
  fontWeight: "600",
  textAlign: "center",
  transition: "background-color 0.2s ease"
}}
  >
    Learn More
  </a>
</div>

<div style={{ display: "flex", gap: "12px", flexWrap: "wrap" }}>
  <img src="https://mintcdn.com/syntblazellc/-L0ums_2lctDSZ1l/images/skill-tracking.png?fit=max&auto=format&n=-L0ums_2lctDSZ1l&q=85&s=b9b0305c93bb501c9e767b5c76c88835" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/skill-tracking.png" />

  <img src="https://mintcdn.com/syntblazellc/23tyuOzaWS88qFlc/images/nuggets.png?fit=max&auto=format&n=23tyuOzaWS88qFlc&q=85&s=c86c80197299762989e9b882419b2109" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/nuggets.png" />

  <img src="https://mintcdn.com/syntblazellc/-L0ums_2lctDSZ1l/images/bite-sized-exercises.png?fit=max&auto=format&n=-L0ums_2lctDSZ1l&q=85&s=a65f9a38c37ff28ab73ed783c53c60e3" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/bite-sized-exercises.png" />
</div>

<div style={{ display: "flex", gap: "12px", flexWrap: "wrap", marginTop: "12px" }}>
  <img src="https://mintcdn.com/syntblazellc/-L0ums_2lctDSZ1l/images/mastery-chain.png?fit=max&auto=format&n=-L0ums_2lctDSZ1l&q=85&s=748a1763454713e679260fbb95f154a2" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/mastery-chain.png" />

  <img src="https://mintcdn.com/syntblazellc/-L0ums_2lctDSZ1l/images/element-previews.png?fit=max&auto=format&n=-L0ums_2lctDSZ1l&q=85&s=242f61448ff5dd6deaaab2dccc13b507" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/element-previews.png" />

  <img src="https://mintcdn.com/syntblazellc/-L0ums_2lctDSZ1l/images/element-explanations.png?fit=max&auto=format&n=-L0ums_2lctDSZ1l&q=85&s=cf0fc1c31f9cd0fc26716781be05fbc9" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/element-explanations.png" />
</div>
