632 votes

«inconnu» contre «tout»

Tapuscrit 3.0 introduit unknown type, en fonction de leur wiki:

inconnu est maintenant réservé un nom de type, comme il est maintenant un type. En fonction de l'utilisation prévue de l'inconnu, vous souhaiterez peut-être supprimer l' déclaration entièrement (favorisant l'introduction du nouveau type inconnu), ou le renommer en quelque chose d'autre.

Quelle est la différence entre unknown et any? Quand doit-on utiliser unknown sur any?

781voto

devilmaster Points 439

Vous pouvez en lire plus à propos de unknown dans le PR ou le RC annonce, mais l'essentiel, c'est:

[..] inconnue ce qui est le type-safe contrepartie de tout. Tout est programmable à l'inconnu, mais l'inconnu n'est pas cessible à autre chose qu'à elle-même et sans une assertion de type ou d'un contrôle des flux de rétrécissement. De même, aucune opération n'est permise sur une inconnue sans d'abord d'affirmer ou de se restreindre à un plus spécifique.

Quelques exemple:

let vAny: any = 10;          // We can assign anthing to any
let vUnknown: unknown =  10; // We can assign anthing to unknown just like any 


let s1: string = vAny;     // Any is assigable to anything 
let s2: string = vUnknown; // Invalid we can't assign vUnknown to any other type (without an explicit assertion)

vAny.method();     // ok anything goes with any
vUnknown.method(); // not ok, we don't know anything about this variable

L'utilisation suggérée est:

Il y a souvent des moments où nous voulons décrire le moins capable de taper à la Machine. Ceci est utile pour les Api qui veulent signal "cela peut être une valeur, donc vous devez effectuer un certain type de contrôle avant de l'utiliser". Cela oblige les utilisateurs en toute sécurité de connaître les valeurs de retour.

71voto

Awad Maharoof Points 1060

La différence entre l'inconnu et tout est décrit comme:

Un peu comme any, toute valeur est cessible unknown; toutefois, contrairement à any, vous ne pouvez pas accéder à toutes les propriétés sur les valeurs du type unknown, et vous ne pouvez pas appeler/les construire. En outre, les valeurs de type unknown peuvent être attribués uniquement à l' unknown ou any.

Pour répondre à votre question de savoir quand devriez-vous utiliser unknown sur any:

Ceci est utile pour les Api qui veulent signal "cela peut être une valeur, donc vous devez effectuer un certain type de contrôle avant de l'utiliser". Cela oblige les utilisateurs en toute sécurité de connaître les valeurs de retour.

Jetez un oeil à la Tapuscrit 3.0 annonce pour des exemples de vérifier le type d'une variable de type unknown et une explication plus détaillée.

52voto

any type:

L' any type représente tous les possibles JS valeurs. Chaque type est assignable à type any. Par conséquent, le type d' any est un universel supertype du type de système. Le TS compilateur va permettre à toute opération sur valeurs saisies any. Par exemple:

let myVar: any;

myVar[0];
myVar();
myVar.length;
new myVar();

En de nombreuses occasions, c'est trop indulgent de la TS compilateur. c'est à dire permettre à des opérations qui nous aurait connu pour être résultant en une erreur d'exécution.

unknown type:

L' unknown type représente (comme any) de tous les possibles JS valeurs. Chaque type est assignable à type unknown. Par conséquent, le type d' unknown est un autre universel supertype du type de système (à côté de la any). Cependant, le TS compilateur de ne pas permettre à toute opération sur valeurs saisies unknown. En outre, l' unknown type est uniquement attribuables au type d' any. Un exemple permettra de clarifier ce:

let myVar: unknown;

let myVar1: unknown = myVar;   // No error
let myVar2: any = myVar;       // No error
let myVar3: boolean = myVar;   // Type 'unknown' is not assignable to type 'boolean'

// The following operations on myVar all give the error:
// Object is of type 'unknown'
myVar[0];
myVar();
myVar.length;
new myVar();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X