TypeScript: 1.4 Структурное сравнение типов (Structural Subtyping)

Типы объектов сравниваются структурно. Например, в следующем фрагменте кода, можно сказать, что класс ‘CPoint’ реализует интерфейс ‘Point’, потому что ‘CPoint’ имеет все обязательные поля ‘Point’. Компилятор в этом случае будет проверять структурную совместимость класса и интерфейса. Данный пример также показывает, что тип объекта может совпадать с типом анонимного объекта (object literal) до тех пор, пока этот объект содержит все необходимые поля.

interface Point { 
x: number;
y: number;
}
function getX(p: Point) { 
return p.x;
}
class CPoint { 
x: number;
y: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y;
}
}
getX(new CPoint(0, 0)); // Ok, поля совпадают
getX({ x: 0, y: 0, color: “red” }); // Дополнительное поле - Ok
getX({ x: 0 }); // Ошибка! Не хватает поля y

Далее: Контекстная типизация (Contextual Typing)

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.