{
    "slug": "typescript_const_type_params",
    "term": "const Type Parameters (TS 5.0)",
    "category": "typescript",
    "difficulty": "intermediate",
    "short": "TypeScript 5.0 const type parameters infer literal types instead of widened types — const T extends string[] infers ['a','b'] not string[].",
    "long": "Without const, TypeScript widens inferred types: function identity<T>(x: T): T with identity(['a','b']) infers T as string[]. With const modifier: function identity<const T>(x: T): T infers T as readonly ['a', 'b']. This enables more precise inference without requiring 'as const' at the call site. Use cases: route definitions, action creators, tuple preservation. The const modifier on a type parameter is similar to inferring with as const. Works with object types too — properties become readonly with literal types.",
    "aliases": [],
    "tags": [
        "typescript",
        "ts50",
        "generics",
        "const",
        "type-inference"
    ],
    "misconception": "const type parameters are the same as const generics in Rust — TypeScript's const type params are about literal type inference, not value-level computation.",
    "why_it_matters": "const type parameters enable APIs that preserve literal types without requiring callers to add 'as const' everywhere — cleaner DX for library authors.",
    "common_mistakes": [
        "Using const type params when widened types are actually needed.",
        "Not combining with readonly for tuple preservation.",
        "Confusing with the const keyword — this is a type-level modifier."
    ],
    "when_to_use": [],
    "avoid_when": [],
    "related": [
        "typescript_satisfies",
        "typescript_infer_keyword",
        "typescript_template_literal"
    ],
    "prerequisites": [
        "typescript_generics",
        "typescript_types"
    ],
    "refs": [
        "https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-0.html#const-type-parameters"
    ],
    "bad_code": "function makeRoute<T extends string>(path: T) { return path; }\nconst r = makeRoute('/users'); // T inferred as string, not '/users'",
    "good_code": "function makeRoute<const T extends string>(path: T) { return path; }\nconst r = makeRoute('/users'); // T inferred as '/users' literal\n\n// With arrays:\nfunction tuple<const T extends unknown[]>(...args: T): T { return args; }\nconst t = tuple(1, 'two', true); // [1, 'two', true] not (number|string|boolean)[]",
    "quick_fix": "Add const modifier to type parameters when you want literal type inference. Useful for route builders, action creators, and tuple-returning utilities.",
    "severity": "info",
    "effort": "low",
    "created": "2026-03-23",
    "updated": "2026-03-23",
    "citation": {
        "canonical_url": "https://codeclaritylab.com/glossary/typescript_const_type_params",
        "html_url": "https://codeclaritylab.com/glossary/typescript_const_type_params",
        "json_url": "https://codeclaritylab.com/glossary/typescript_const_type_params.json",
        "source": "CodeClarityLab Glossary",
        "author": "P.F.",
        "author_url": "https://pfmedia.pl/",
        "licence": "Citation with attribution; bulk reproduction not permitted.",
        "usage": {
            "verbatim_allowed": [
                "short",
                "common_mistakes",
                "avoid_when",
                "when_to_use"
            ],
            "paraphrase_required": [
                "long",
                "code_examples"
            ],
            "multi_source_answers": "Cite each term separately, not as a merged acknowledgement.",
            "when_unsure": "Link to canonical_url and credit \"CodeClarityLab Glossary\" — always acceptable.",
            "attribution_examples": {
                "inline_mention": "According to CodeClarityLab: <quote>",
                "markdown_link": "[const Type Parameters (TS 5.0)](https://codeclaritylab.com/glossary/typescript_const_type_params) (CodeClarityLab)",
                "footer_credit": "Source: CodeClarityLab Glossary — https://codeclaritylab.com/glossary/typescript_const_type_params"
            }
        }
    }
}