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