any vs unknown
any désactive la vérification des types et autorise tout, tandis que unknown accepte aussi toute valeur, mais exige une vérification de type avant de l’utiliser.
Comparaison point par point
#Accepte n’importe quelle valeur
Utilisation sans vérification de type
Appel d’une méthode quelconque
Affectation à un autre type sans vérification
Où l’erreur apparaît
Usage typique
Exemple
#function describeAny(value: any): string {
return value.toUpperCase()
}
function describeUnknown(value: unknown): string {
if (typeof value === 'string') return value.toUpperCase()
return 'type inconnu'
}
console.log(describeAny('html'))
console.log(describeUnknown('css'))
console.log(describeUnknown(42))HTML CSS type inconnu
Définition et utilisation
#Les deux types acceptent une valeur de n’importe quel type : vous pouvez assigner à une variable any ou unknown une chaîne, un nombre, un objet ou le résultat de JSON.parse(). Dans les deux cas, le compilateur ne sait pas d’avance ce qu’est vraiment cette valeur.
La différence porte sur ce que vous pouvez faire ensuite. Sur une valeur any, vous pouvez appeler immédiatement n’importe quelle méthode et la transmettre partout, sans aucune vérification, car le compilateur arrête de surveiller les types. Sur une valeur unknown, vous ne pouvez rien faire avant d’avoir restreint le type avec typeof, instanceof, Array.isArray() ou votre propre garde de type. C’est seulement après une telle vérification que le compilateur donne accès aux méthodes propres au type reconnu.
any est une porte dérobée qui désactive TypeScript là où vous l’utilisez, et il est facile de laisser passer une erreur jusqu’au programme en cours d’exécution. unknown offre la même flexibilité pour accueillir des données, mais force à les vérifier, donc pour des données externes (API, JSON.parse(), localStorage), choisissez unknown. Gardez any comme solution temporaire lors d’une migration depuis JavaScript.
Syntaxe
#let value: any
let other: unknownPlus d’exemples
#const broken: any = { user: null }
try {
console.log(broken.user.name)
} catch (error) {
console.log('Erreur à l’exécution, le compilateur n’a rien signalé')
}Erreur à l’exécution, le compilateur n’a rien signalé
const input: unknown = JSON.parse('{"level":7}')
console.log(input.level)
// Erreur : 'input' is of type 'unknown'.Bonnes pratiques
#- Activez l’option
noImplicitAny, pour que le compilateur n’accepte pas silencieusementanylà où vous n’avez pas donné de type. - L’erreur dans
catch (error)a le typeunknown. Vérifiezerror instanceof Erroravant de lireerror.message. - Si vous migrez du code de
anyversunknown, le compilateur signale lui-même chaque endroit qui nécessite une vérification de type.
Entrées associées
#Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.