Объект — это экземпляр, который содержит множество пар ключ-значение. Значения могут быть скалярными значениями или функциями или даже массивом других объектов. Синтаксис приведен ниже —
Синтаксис
var object_name = { key1: “value1”, //scalar value key2: “value”, key3: function() { //functions }, key4:[“content1”, “content2”] //collection };
Как показано выше, объект может содержать скалярные значения, функции и структуры, такие как массивы и кортежи.
Пример: буквенное обозначение объекта
var person = { firstname:"Tom", lastname:"Hanks" }; //access the object values console.log(person.firstname) console.log(person.lastname)
При компиляции он сгенерирует тот же код в JavaScript.
Вывод вышеуказанного кода выглядит следующим образом:
Tom Hanks
TypeScript Type Template
Допустим, вы создали объектный литерал в JavaScript как —
var person = { firstname:"Tom", lastname:"Hanks" };
Если вы хотите добавить какое-то значение к объекту, JavaScript позволяет вам внести необходимые изменения. Предположим, нам нужно добавить функцию к объекту person позже, вот как вы можете это сделать.
person.sayHello = function(){ return "hello";}
Если вы используете тот же код в Typescript, компилятор выдаст ошибку. Это потому, что в Typescript конкретные объекты должны иметь шаблон типа. Объекты в Typescript должны быть экземпляром определенного типа.
Вы можете решить эту проблему, используя шаблон метода в объявлении.
Пример: шаблон Typescript Type
var person = { firstName:"Tom", lastName:"Hanks", sayHello:function() { } //Type template } 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.
//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);
Его вывод выглядит следующим образом —
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.
//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" });
Его вывод выглядит следующим образом —
first name :Sachin last name :Tendulkar
Утка-типирование
При типизировании утки два объекта считаются одного типа, если оба имеют один и тот же набор свойств. Duck-typing проверяет наличие определенных свойств в объектах, а не их фактический тип, чтобы проверить их пригодность. Концепция обычно объясняется следующей фразой —
«Когда я вижу птицу, которая ходит, как утка, и плавает, как утка, и крякает, как утка, я называю эту птицу уткой».
Компилятор TypeScript реализует систему типизации, которая позволяет создавать объекты на лету, сохраняя при этом безопасность типов. В следующем примере показано, как мы можем передавать объекты, которые явно не реализуют интерфейс, но содержат все необходимые члены функции.