Главная » Статьи » TypeScript — Объекты

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

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

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