TypeScript - objetos

A objecté uma instância que contém um conjunto de pares de valores-chave. Os valores podem ser valores escalares ou funções ou mesmo array de outros objetos. A sintaxe é fornecida abaixo -

Sintaxe

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

Conforme mostrado acima, um objeto pode conter valores escalares, funções e estruturas como matrizes e tuplas.

Exemplo: Notação Literal de Objeto

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

Na compilação, ele irá gerar o mesmo código em JavaScript.

A saída do código acima é a seguinte -

Tom 
Hanks

Modelo de tipo TypeScript

Digamos que você criou um objeto literal em JavaScript como -

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

Caso você queira adicionar algum valor a um objeto, o JavaScript permite que você faça as modificações necessárias. Suponha que precisemos adicionar uma função ao objeto pessoa mais tarde, é assim que você pode fazer isso.

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

Se você usar o mesmo código em Typescript, o compilador fornecerá um erro. Isso ocorre porque no Typescript, objetos concretos devem ter um modelo de tipo. Os objetos em Typescript devem ser uma instância de um tipo específico.

Você pode resolver isso usando um modelo de método na declaração.

Exemplo: modelo de tipo de texto tipográfico

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

Na compilação, ele irá gerar o mesmo código em JavaScript.

A saída do código acima é a seguinte -

hello Tom

Os objetos também podem ser passados ​​como parâmetros para funcionar.

Exemplo: objetos como parâmetros de função

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)

O exemplo declara um objeto literal. A expressão de função é invocada passando um objeto pessoal.

Na compilação, ele irá gerar o seguinte código 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);

Seu resultado é o seguinte -

first name :Tom 
last name :Hanks

Você pode criar e passar um objeto anônimo na hora.

Exemplo: objeto anônimo

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"});

Na compilação, ele irá gerar o seguinte código 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" });

Seu resultado é o seguinte -

first name :Sachin 
last name :Tendulkar

Digitação de pato

Na digitação de pato, dois objetos são considerados do mesmo tipo se ambos compartilham o mesmo conjunto de propriedades. A digitação em pato verifica a presença de certas propriedades nos objetos, em vez de seu tipo real, para verificar sua adequação. O conceito é geralmente explicado pela seguinte frase -

“Quando vejo um pássaro que anda como um pato e nada como um pato e grasna como um pato, eu chamo esse pássaro de pato.”

O compilador TypeScript implementa o sistema de digitação de pato que permite a criação de objetos em tempo real, mantendo a segurança de tipo. O exemplo a seguir mostra como podemos passar objetos que não implementam explicitamente uma interface, mas contêm todos os membros necessários para uma função.

Exemplo

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