TypeScript - Oggetti

Un objectè un'istanza che contiene un insieme di coppie di valori chiave. I valori possono essere valori o funzioni scalari o anche array di altri oggetti. La sintassi è data di seguito:

Sintassi

var object_name = { 
   key1: “value1”, //scalar value 
   key2: “value”,  
   key3: function() {
      //functions 
   }, 
   key4:[“content1”, “content2”] //collection  
};

Come mostrato sopra, un oggetto può contenere valori scalari, funzioni e strutture come array e tuple.

Esempio: notazione letterale oggetto

var person = { 
   firstname:"Tom", 
   lastname:"Hanks" 
}; 
//access the object values 
console.log(person.firstname) 
console.log(person.lastname)

Durante la compilazione, genererà lo stesso codice in JavaScript.

L'output del codice sopra è il seguente:

Tom 
Hanks

TypeScript Type Template

Supponiamo che tu abbia creato un oggetto letterale in JavaScript come -

var person = { 
   firstname:"Tom", 
   lastname:"Hanks" 
};

Nel caso in cui desideri aggiungere un valore a un oggetto, JavaScript ti consente di apportare le modifiche necessarie. Supponiamo di dover aggiungere una funzione all'oggetto persona in un secondo momento, questo è il modo in cui puoi farlo.

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

Se usi lo stesso codice in Typescript, il compilatore restituisce un errore. Questo perché in Typescript, gli oggetti concreti dovrebbero avere un modello di tipo. Gli oggetti in Typescript devono essere un'istanza di un tipo particolare.

Puoi risolvere questo problema utilizzando un modello di metodo nella dichiarazione.

Esempio: modello di tipo Typescript

var person = {
   firstName:"Tom", 
   lastName:"Hanks", 
   sayHello:function() {  }  //Type template 
} 
person.sayHello = function() {  
   console.log("hello "+person.firstName)
}  
person.sayHello()

Durante la compilazione, genererà lo stesso codice in JavaScript.

L'output del codice sopra è il seguente:

hello Tom

Gli oggetti possono anche essere passati come parametri per funzionare.

Esempio: oggetti come parametri di funzione

var person = { 
   firstname:"Tom", 
   lastname:"Hanks" 
}; 
var invokeperson = function(obj: { firstname:string, lastname :string }) { 
   console.log("first name :"+obj.firstname) 
   console.log("last name :"+obj.lastname) 
} 
invokeperson(person)

L'esempio dichiara un oggetto letterale. L'espressione della funzione viene richiamata passando l'oggetto persona.

Durante la compilazione, genererà il seguente codice JavaScript.

//Generated by typescript 1.8.10
var person = {
   firstname: "Tom",
   lastname: "Hanks"
};

var invokeperson = function (obj) {
   console.log("first name :" + obj.firstname);
   console.log("last name :" + obj.lastname);
};

invokeperson(person);

Il suo output è il seguente:

first name :Tom 
last name :Hanks

Puoi creare e passare un oggetto anonimo al volo.

Esempio: oggetto anonimo

var invokeperson = function(obj:{ firstname:string, lastname :string}) { 
   console.log("first name :"+obj.firstname) 
   console.log("last name :"+obj.lastname) 
} 
invokeperson({firstname:"Sachin",lastname:"Tendulkar"});

Durante la compilazione, genererà il seguente codice JavaScript.

//Generated by typescript 1.8.10
var invokeperson = function (obj) {
   console.log("first name :" + obj.firstname);
   console.log("last name :" + obj.lastname);
};

invokeperson({ firstname: "Sachin", lastname: "Tendulkar" });
invokeperson({ firstname: "Sachin", lastname: "Tendulkar" });

Il suo output è il seguente:

first name :Sachin 
last name :Tendulkar

Dattilografia

Nella dattilografia, due oggetti sono considerati dello stesso tipo se condividono lo stesso insieme di proprietà. La dattilografia verifica la presenza di determinate proprietà negli oggetti, piuttosto che il loro tipo effettivo, per verificarne l'idoneità. Il concetto è generalmente spiegato dalla seguente frase:

"Quando vedo un uccello che cammina come un'anatra e nuota come un'anatra e fa schifo come un'anatra, io chiamo quell'uccello un'anatra."

Il compilatore TypeScript implementa il sistema di dattilografia che consente la creazione di oggetti al volo mantenendo l'indipendenza dai tipi. L'esempio seguente mostra come passare oggetti che non implementano esplicitamente un'interfaccia ma contengono tutti i membri richiesti a una funzione.

Esempio

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} 
} 

//Valid 
var newPoint = addPoints({x:3,y:4},{x:5,y:1})  

//Error 
var newPoint2 = addPoints({x:1},{x:4,y:3})