28
Фев
2018

TypeScript — Объекты

TypeScript — Объекты

От автора: в TypeScript объекты — это экземпляры, которые содержат набор пар ключ-значение. Значениями могут быть скалярными значениями или функциями, или даже массивами других объектов. Синтаксис приведён ниже.

Синтаксис

var object_name = { 
   key1: "value1", //скалярное значение 
   key2: "value",  
   key3: function() {
      //функции 
   }, 
   key4:["content1", "content2"] //набор  
};

Как показано выше, объект может содержать скалярные значения, функции и структуры, например массивы и кортежи. Пример: Нотация объектного литерала

var person = { 
   firstname:"Tom", 
   lastname:"Hanks" 
}; 
//доступ к значению объекта 
console.log(person.firstname) 
console.log(person.lastname)

После компиляции, мы получим тот же код JavaScript. Результат выглядит следующим образом:

Tom 
Hanks

Шаблон типа TypeScript

Предположим, вы создали в JavaScript такой литерал объекта:

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

Если вы хотите добавить объекту какое-то значение, JavaScript позволяет выполнить необходимые модификации. Предположим, потом нам нужно добавить объекту person функцию, вот как мы можем это сделать.

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

Если вы используете тот же код в Typescript, компилятор выдаст ошибку. Это связано с тем, что в Typescript конкретные объекты должны иметь шаблон типа. Объекты в Typescript должны быть экземплярами определённого типа. Решить эту проблему можно используя шаблон метода в объявлении. Пример: Шаблон типа Typescript

var person = {
   firstName:"Tom", 
   lastName:"Hanks", 
   sayHello:function() {  }  //Шаблон типа 
} 
person.sayHello = function() {  
   console.log("hello "+person.firstName)
}  
person.sayHello()

После компиляции, мы получим тот же код JavaScript. Результат выглядит следующим образом:

hello Tom

Объекты также могут быть переданы функции в качестве параметра. Пример: Объекты в качестве параметров функции

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)

В этом коде мы объявляем литерал объекта. Выражение функции вызывается путём передачи объекта person. После компиляции мы получим следующий JavaScript код:

//Сгенерировано посредством 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);

Результат выглядит следующим образом:

first name :Tom 
last name :Hanks

Вы можете оперативно создавать и передавать анонимный объект. Пример: Анонимный объект

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

После компиляции мы получим следующий код JavaScript:

//Сгенерировано посредством 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" });

Результат выглядит следующим образом:

first name :Sachin 
last name :Tendulkar
Duck-typing

Концепция duck-typing заключается в том, что два объекта считаются объектами одного типа, если оба они имеют одинаковый набор свойств. Чтобы проверить их соответствие, duck-typing подтверждает наличие определённых свойств у объектов, а не их действительный тип. Концепцию можно объяснить при помощи следующей фразы:

“Когда я вижу птицу, которая ходит, как утка, плавает, как утка, и крякает как утка, я считаю, что эта птица — утка”. TypeScript компилятор реализует систему duck-typing, которая позволяет оперативно создавать объект и сохранять безопасность типов. Следующий пример иллюстрирует, как мы можем передавать объекты функции, которые неявно реализуют интерфейс, но содержат все требующиеся члены.

Пример

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

//корректно 
var newPoint = addPoints({x:3,y:4},{x:5,y:1})  

//Ошибка 
var newPoint2 = addPoints({x:1},{x:4,y:3})

Источник: //www.tutorialspoint.com/

Редакция: Команда webformyself.

Источник: https://webformyself.com/typescript-obekty/

Тебе может это понравится...

Добавить комментарий