Название фичи: Интерфейсы

Описание:
Интерфейс определяет свойства и методы, которые объект должен реализовать. Интерфейсы определяются с помощью ключевого слова interface. Используется как альтернатива множественного наследования. Позволяет заложить структуру класса: имена методов, списки аргументов, возвращаемые типы, но только не тела методов.

Аналог в c# / js: interface

Решаемая проблема:
Наложение ряда ограничений на объект.

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

Преимущества:

  • Возможность объявить опциональное свойство (помечается «)
  • Возможность добавления свойства только дл чтения (readonly)
  • Классы могут реализовывать интерфейсы (implements)
  • Интерфейсы могут наследоваться как и классы (extends)
  • Интерфейсы массивов позволяют описывать объекты, к которым можно обращаться по заданному индексу (см. пример)
  • Гибридные интерфейсы (применяться сразу как к определению объекта, так и к определению функции)

Пример проблемы на JavaScript:

Обычный интерфейс:

function printLabel(labelledObj) {
    console.log(labelledObj.label);
}

var myObj = { size: 10, label: "Size 10 Object" };
printLabel(myObj);

Интерфейс массива:

var colors = {};
colors["red"] = "#ff0000";
colors["green"] = "#00ff00";
colors["blue"] = "#0000ff";

Пример решения на TypeScript:

Обычный интерфейс:

interface LabelledValue {
    label: string;
}

function printLabel(labelledObj: LabelledValue) {
    console.log(labelledObj.label);
}

let myObj = {
    size: 10,
    label: "Size 10 Object"
};

printLabel(myObj);

Интерфейс массива:

interface Dictionary {
    [index: string]: string;
}

var colors: Dictionary = {};

colors["red"] = "#ff0000";
colors["green"] = "#00ff00";
colors["blue"] = "#0000ff";

console.log(colors["red"]);

Как решить проблему: Создать объект, который реализует интерфейс.

Синтаксис: при компиляции интерфейс исчезает

results matching ""

    No results matching ""