Интерфейсы
interface IUser {
id: number;
name: string;
age?: number; // обязательное свойство
}
let employee: IUser = {
id: 1,
name: "Alice",
age: 23
}
Опять же объект, который реализует интерфейс, также обязан реализовать определенную в интерфейсе функцию с тем же набором параметров и тем типом выходного результата.
Интерфейсы классов
interface IUser {
id: number;
name: string;
getFullName(surname: string): string;
}
class User implements IUser{
id: number;
name: string;
age: number;
constructor(userId: number, userName: string, userAge: number) {
this.id = userId;
this.name = userName;
this.age = userAge;
}
getFullName(surname: string): string {
return this.name + " " + surname;
}
}
let tom = new User(1, "Tom", 23);
console.log(tom.getFullName("Simpson"));
Наследование интерфейсов
interface IMovable {
speed: number;
move(): void;
}
interface ICar extends IMovable {
fill(): void;
}
class Car implements ICar {
speed: number;
move(): void {
console.log("Машина едет со скоростью " + this.speed + " км/ч");
}
fill(): void {
console.log("Заправляем машину топливом");
}
}
let auto = new Car();
auto.speed = 60;
auto.fill();
auto.move();
Интерфейс функций
interface FullNameBuilder {
(name: string, surname: string): string;
}
let simpleBuilder: FullNameBuilder = function (name:string, surname: string): string {
return "Mr. " + name + " " + surname;
}
let fullName = simpleBuilder("Bob", "Simpson");
console.log(fullName); // Mr. Bob Simpson
Интерфейс массивов
interface StringArray {
[index: number]: string;
}
let phones: StringArray;
phones = ["iPhone 7", "HTC 10", "HP Elite x3"];
let myPhone: string = phones[0];
console.log(myPhone);
Гибриды интерфейсов
interface PersonInfo {
(name: string, surname: string):void;
fullName: string;
password: string;
authenticate(): void;
}
function personBuilder(): PersonInfo {
let person = <PersonInfo>function (name: string, surname: string): void{
person.fullName = name + " " + surname;
};
person.authenticate = function () {
console.log(person.fullName + " входит в систему с паролем " + person.password);
};
return person;
}
let tom = personBuilder();
tom("Tom", "Simpson");
tom.password = "qwerty";
tom.authenticate();