# TypeScript 5.4: nuova utility NoInfer

> La nuova utility NoInfer<T> introdotta in TypeScript 5.4 per controllare l'inferenza dei tipi generici, con esempi pratici.

- Autore / Author: Diego Betto (https://diegobetto.com/about/)
- Pubblicato / Published: 2024-02-05
- URL: https://diegobetto.com/typescript-noinfer-utility/
- Tag: typescript, javascript, 5.4, inference

L'uscita di [TypeScript 5.4](https://devblogs.microsoft.com/typescript/announcing-typescript-5-4-beta/) porta con se varie novità, tra le quali una nuova utility `NoInfer<T>`.

### Perché è stata introdotta l'utility `NoInfer`?

La necessità nasce dal fatto che spesso non è possibile in modo corretto dedurre quali valori può assumere un determinato attributo.
Ad esempio, se noi scriviamo una funzione che accetta:

- un elenco di animali possibili;
- un'animale di default;

```js
function visualizzaAnimale<A extends string>(animali: A[], animaleDefault?: A) {
    // ...
}

visualizzaAnimale(["cane", "gatto", "tartaruga"], "cane");
```

è molto probabile che ci aspettiamo `animaleDefault` impostato su uno di quelli possibili.
Al momento, con la definizione di tipi di cui sopra, questo non è sempre garantito. Infatti rimane valida, anche se non desiderabile, un'invocazione di questo tipo:

```js
visualizzaAnimale(["cane", "gatto", "tartaruga"], "coccodrillo");
```

### La soluzione

Per questo è stata introdotta l'utility `NoInfer` che ci permette di istruire TypeScript a non analizzare e a non tenere in considerazione il valore che passiamo a `animaleDefault` come valido per il generic `A`.

```js
function visualizzaAnimale<A extends string>(animali: A[], animaleDefault?: NoInfer<A>) {
    // ...
}

visualizzaAnimale(["cane", "gatto", "tartaruga"], "coccodrillo");
//                                            ~~~~~~
// error!
// Argument of type '"coccodrillo"' is not assignable to parameter of type '"cane", "gatto", "tartaruga" | undefined'.
```

Così diciamo a TypeScript di ignorare i valori che può avere `animaleDefault` e considerare possibili solo quelli di `animali`.

Se cercate maggiori informazioni:

- [https://github.com/microsoft/TypeScript/pull/56794](https://github.com/microsoft/TypeScript/pull/56794)
- [https://devblogs.microsoft.com/typescript/announcing-typescript-5-4-beta](https://devblogs.microsoft.com/typescript/announcing-typescript-5-4-beta)
