📖 Guide Documents
Core Library
TypedParam

Outline

@nestia/core
export function TypedParam(name: string): ParameterDecorator;
export function TypedParam(
    name: string, 
    type: "uuid" | "date"
): ParameterDecorator;

Type safe path parameter decorator.

@TypedParam() is a decorator parsing path parameter.

It's almost same with original @Param() function of NestJS, however, @TypedParam() is more type safe.

As @TypedParam() can anlayze source code in the compilation level, it can specify parameter type by itself. Also, while NestJS cannot distinguish nullable type and consider every parameter value as a string type, @TypedParam() can do it. Furthermore, @TypedParam() can validate special types like "uuid" or "date".

Let's read below example code, and see how @TypedParam() works.

How to use

ParametersController.ts
import { TypedParam } from "@nestia/core";
import { Controller, Get } from "@nestjs/common";
import { tags } from "typia";
 
@Controller("parameters")
export class ParametersController {
    @Get("uint32/:value")
    public async uint32(
        @TypedParam("value") value: (number & tags.Type<"uint32">) | null,
    ): Promise<(number & tags.Type<"uint32">) | null> {
        return value;
    }
 
    @Get("string/:value")
    public async string(
        @TypedParam("value") value: string,
    ): Promise<string> {
        return value;
    }
 
    @Get("uuid/:value")
    public async uuid(
        @TypedParam("value") value: string & tags.Format<"uuid">,
    ): Promise<string> {
        return value;
    }
}

Just call @TypedParam() function on the path paremeter, that's all.

If you want to special parameter type like "uint32" or "uuid", utilize type tags of typia (opens in a new tab).

When wrong typed value comes, 400 bad request error would be thrown.

Restriction

@TypedParam() allows only atomic type.

  • boolean
  • number
  • string
  • bigint

Also, @TypedParam() allows nullable like number | null, but undefindable type is not.

  • number | null is allowed
  • string | undefined is prohibited

If you violate above condition, and try to declare object or union type, compilation error would be occured:

Error on nestia.core.TypedParam(): only atomic type is allowed