Интерфейсы

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();

results matching ""

    No results matching ""