В С# существует довольно большая разница между интерфейсами и классами. Действительно, класс представляет ссылочный тип, так что мы можем фактически создавать объекты, смоделированные на этом классе, тогда как интерфейсы предназначены для контрактов, для которых знак класса используется для обеспечения существования определенного поведения. В частности, мы не можем создавать экземпляры интерфейсов.
Весь смысл использования интерфейсов - выявить поведение. Класс реализует его, предоставляя одну явную реализацию указанного поведения.
В этом случае, хотя интерфейсы могут содержать свойства, большую часть времени мы заботимся об интерфейсах из-за поведенческих проблем. Таким образом, большинство типов, интерфейсов - это просто контракты поведения.
На TypeScript, с другой стороны, я, кажется, что-то очень беспокоило меня, и, по правде говоря, я видел это не один раз, и это причина этого вопроса.
В одном учебнике я увидел это:
export interface User {
name: string; // required with minimum 5 chracters
address?: {
street?: string; // required
postcode?: string;
}
}
Но подождите минуту. Почему User
- это интерфейс? Если мы думаем, что С#, User
не должен быть интерфейсом. На самом деле, глядя на это, похоже, мы определяем тип данных User
вместо контракта поведения.
Думая, что мы делаем на С#, естественным было бы следующее:
export class User {
public name: string;
public address: Address;
}
export class Address {
public street: string;
public postcode: string;
}
Но эта функция использования интерфейсов, подобных нам с классами, просто определить тип данных, а не определять контракт поведения, кажется очень распространенной в TypeScript.
Итак, какие интерфейсы предназначены для TypeScript? Почему люди используют интерфейсы в TypeScript, как мы используем clases в С#? Как правильно использовать интерфейсы в TypeScript: устанавливать контракты поведения или определять свойства и объект должны иметь?