# no-unnecessary-type-parameter

Disallow type parameters that add no relationship or precision

A callable type parameter used once in its signature relates no input or output types.
Instead, you SHOULD use its constraint directly.

A type parameter remains useful when it appears in multiple signature positions or participates in another generic relation.

- Category: style
- Level: warning
- Fix: none
- Scope: module

## Reported

```ds title="main.ds"
function printValue<T: Display>(value: &readonly T): void {
    value.display();
}
```

## Accepted

```ds title="main.ds"
function choose<T: Display>(left: T, right: T): T {
    return left;
}
```

## Prior art

- [typescript-eslint · no-unnecessary-type-parameters](https://typescript-eslint.io/rules/no-unnecessary-type-parameters)

[language/linter/src/rules/style/no_unnecessary_type_parameter.rs:6](https://github.com/destack-sh/destack/blob/main/language/linter/src/rules/style/no_unnecessary_type_parameter.rs#L6)
