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 функцию, вот как мы можем это сделать.

Фреймворк VUE JS: быстрый старт, первые результаты

Получите бесплатный курс и создайте веб-приложение на трендовой Frontend-технологии VUE JS с полного нуля

Узнать подробнее
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.

Фреймворк VUE JS: быстрый старт, первые результаты

Получите бесплатный курс и создайте веб-приложение на трендовой Frontend-технологии VUE JS с полного нуля

Узнать подробнее

Курс по ES 6 (EcmaScript 6.0)

Прямо сейчас посмотрите курс по EcmaScript 6.0

Смотреть курс

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree