'tout' vs 'Objet'
Je suis à la recherche à la Production de code et remarqué qu'ils utilisent:
interface Blablabla {
field: Object;
}
Quel est l'avantage de l'utilisation de Object
vs any
, comme dans:
interface Blablabla {
field: any;
}
Vous devez vous connecter pour publier un commentaire.
Object
est plus restrictive queany
. Par exemple:La
Object
classe n'ont pas denomethod()
fonction, donc la transpiler générera un message d'erreur vous indiquant exactement que. Si vous utilisezany
au lieu de cela vous dit en gros à la transpiler à tout va, vous êtes en fournissant aucune information sur ce qui est stocké dansa
- il peut être n'importe quoi! Et, par conséquent, la transpiler vous permettra de faire ce que vous voulez avec quelque chose de défini commeany
.Donc en bref
any
peut être n'importe quoi (vous pouvez appeler n'importe quelle méthode etc sur elle sans erreurs de compilation)Object
expose les fonctions et les propriétés définies dans laObject
classe.Peu vieux, mais ne fait pas de mal à ajouter quelques notes.
Lorsque vous écrivez quelque chose comme ceci
Et c'est pourquoi
et pourquoi
De sorte que les deux
Object
et{}
sont l'équivalent pour les caractères d'imprimerie. Je ne vois pas quelqu'un de vraiment l'utiliser. Trop restrictives.Si vous déclarez ces fonctions
avec l'intention d'accepter quoi que ce soit pour les param (vous allez peut-être vérifier les types à l'exécution, le temps de décider quoi faire avec elle), n'oubliez pas que
Donc, fondamentalement, lorsque vous ne connaissez pas le type, aller avec tout et faire de type à l'exécution de la vérification.
Évidemment, OO héritage règles continuent de s'appliquer, donc, si vous voulez accepter les instances de classes dérivées et les traiter en fonction de leur type de base, comme dans
le type de base est la façon de le faire, pas tout. Mais c'est OO, hors de portée, je voulais juste préciser que tout ne doit être utilisé lorsque vous ne savez pas ce qui est à venir, et pour tout ce que vous devez annoter le type correct.
Mise à JOUR:
Tapuscrit 2.2 ajouté une
object
type, qui indique qu'une valeur est un non-primitive: (c'est à dire pas unnumber
,string
,boolean
,symbol
,undefined
, ounull
).Considérer que les fonctions définies comme suit:
x
aura les mêmes propriétés disponibles au sein de l'ensemble de ces fonctions, mais c'est une erreur de type à l'appeld
avec quelque chose de non-primitive:{}
puis si ils avaient déjàObject
? (ou vice-versa, selon la première éventualité) Il y a quand même une légère différence, non?{}
est la façon normale de définir (inline) interfaces, seulement dans ce cas que vous êtes à la définition d'une interface sans membres. La légère différence est bien expliqué dans la réponse: "{}
s'étendObject
, comme toute autre chose dans la Machine".any
et faire de type à l'exécution de la vérification. Ne pas utiliserany
, utilisez à la place d'une union des types de vérification:TypeA|InterfaceB|string
. Si vous aussi vous avez un cas par défaut pour un type inconnu, ajouter{}
ouObject
de l'union.But variables of type Object only allow you to assign any value to them - you can’t call arbitrary methods on them, even ones that actually exist:
m'a fait penser que même l'appel detoString
n'est pas autorisé, alors qu'en fait, je pense qu'ils ont voulu dire,exist at runtime
après la lecture de votre réponse.any
est quelque chose de spécifique à la Machine s'explique assez bien par alex de la réponse.Object
se réfère à l'JavaScriptobject
type. Couramment utilisé comme{}
ou parfoisnew Object
. La plupart des choses dans javascript sont compatibles avec le type de données objet, comme ils héritent de lui. Maisany
est Tapuscrit spécifique et compatible avec tout dans les deux directions (pas d'héritage de la base). par exemple :Object
etobject
qui sont de types différents, en caractères d'imprimerie.Object
etobject
en TS?object
est un type pour tout ce qui n'est pas primitive, tandis queObject
est une interface qui contient des choses ordinaires commetoString
et ces. Le nombre42
serait unObject
mais pas unobject
.Contrairement à .NET où tous les types de dériver à partir d'un "objet", en caractères d'imprimerie, tous les types de dériver de "tout". Je voulais juste ajouter cette comparaison que je pense que ça va être une commune fait aussi plus .NET développeurs de donner à la Machine un essai.
Objet semble être plus spécifique de la déclaration que tout. À partir du Tapuscrit spec (section 3):
Aussi:
Objets ne permettent pas la même souplesse.
Par exemple:
L'ajout d'Alex réponse et de simplification:
Objets sont plus sévères avec leur utilisation et leur donne donc le programmeur en plus de la compilation "évaluation" puissance et, par conséquent, dans beaucoup de cas, fournir plus de "capacités de vérification" et coould empêcher toute fuite, alors que tout est un terme plus générique et beaucoup de temps de compilation chèques peuvent donc être ignorés.
Gardez à l'esprit que vous devez presque jamais utiliser les types de Nombre, Chaîne, Boolean, ou Objet que en conséquence pour le Tapuscrit de la documentation