Objet TypeScript

Un objet est une instance qui contient un ensemble de paires clé-valeur. Les valeurs peuvent être des scalaires, des fonctions, des tableaux, des objets, etc., comme dans l'exemple suivant :

var object_name = { key1: "value1", //Scalaire key2: "value", key3: function() { //Fonction }, key4:["content1", "content2"] //Collection }

L'objet ci-dessus contient des scalaires, des fonctions et des collections (tableaux ou tuples).

Instance d'objet

TypeScript

var sites = { site1:"Example", site2:"Google" }; //Accès aux valeurs de l'objet console.log(sites.site1) console.log(sites.site2)

Compilez le code ci-dessus pour obtenir le code JavaScript suivant :

JavaScript

var sites = { site1:"Example", site2:"Google" }; //Accès aux valeurs de l'objet console.log(sites.site1) console.log(sites.site2)

Le résultat de sortie est:

Example
Google

Modèle de type TypeScript

Supposons que nous définissions un objet en JavaScript :

var sites = { site1:"Example", site2:"Google" };

Si nous voulons ajouter des méthodes à l'objet, nous pouvons effectuer les modifications suivantes :

sites.sayHello = function(){ return "hello";}

Si l'approche ci-dessus est utilisée en TypeScript, une erreur de compilation se produira, car les objets en TypeScript doivent être des instances d'un type spécifique.

TypeScript

var sites = { site1: "Example", site2: "Google", sayHello: function () { } //Modèle de type }; sites.sayHello = function () { console.log("hello " + sites.site1); }; sites.sayHello();

Compilez le code ci-dessus pour obtenir le code JavaScript suivant :

JavaScript

var sites = { site1: "Example", site2: "Google", sayHello: function () { } //Modèle de type }; sites.sayHello = function () { console.log("hello " + sites.site1); }; sites.sayHello();

Le résultat de sortie est:

hello Example

De plus, un objet peut également être passé comme paramètre à une fonction, comme dans l'exemple suivant :

TypeScript

var sites = { site1:"Example", site2:"Google", }; var invokesites = function(obj: { site1:string, site2 :string }) { console.log("site1 :"+obj.site1) console.log("site2 :"+obj.site2) } invokesites(sites)

Compilez le code ci-dessus pour obtenir le code JavaScript suivant :

JavaScript

var sites = { site1: "Example", site2: "Google" }; var invokesites = function (obj) { console.log("site1 :" + obj.site1); console.log("site2 :" + obj.site2); }; invokesites(sites);

Le résultat de sortie est:

site1 :Example
site2 :Google

Typage canard

Le typage canard (en anglais : duck typing) est un style de typage dynamique et une forme de polymorphisme.

Dans ce style, la sémantique valide d'un objet est déterminée non pas par l'héritage d'une classe spécifique ou l'implémentation d'une interface spécifique, mais par la "collection des méthodes et propriétés actuelles".

On peut l'exprimer comme suit :

« Lorsque vous voyez un oiseau qui marche comme un canard, nage comme un canard et cancane comme un canard, alors cet oiseau peut être appelé un canard. »

Dans le duck typing, l'accent est mis sur ce que le comportement de l'objet peut faire, plutôt que sur le type auquel l'objet appartient. Par exemple, dans les langages qui n'utilisent pas le duck typing, nous pouvons écrire une fonction qui accepte un objet de type « duck » et appelle ses méthodes « walk » et « quack ». Dans les langages qui utilisent le duck typing, une telle fonction peut accepter un objet de n'importe quel type et appeler ses méthodes « walk » et « quack ». Si ces méthodes qui doivent être appelées n'existent pas, une erreur d'exécution sera déclenchée. Le fait que tout objet possédant les bonnes méthodes « walk » et « quack » puisse être accepté par la fonction conduit à l'expression ci-dessus, et cette façon de déterminer le type est donc nommée en conséquence.

interface IPoint { x:number y:number } function addPoints(p1:IPoint,p2:IPoint):IPoint { var x = p1.x + p2.x var y = p1.y + p2.y return {x:x,y:y} } //Correct var newPoint = addPoints({x:3,y:4},{x:5,y:1}) //Erreur var newPoint2 = addPoints({x:1},{x:4,y:3})
Autres extensions