Typescript - как получить доступ к классу, объявленному через пространство имен? - PullRequest
0 голосов
/ 30 августа 2018

один быстрый вопрос от новичка. В настоящее время я ищу способы уменьшить количество «импортов» в своем проекте и наткнулся на этот урок - https://scotch.io/tutorials/3-useful-typescript-tips-for-angular

Он предлагает использовать пространства имен для предоставления интерфейсов, как это

namespace ApiModel {
    export interface Customer {
        id: number;
        name: string;
    }

    export interface User {
        id: number;
        isActive: boolean;
    }
}

и вот как я должен использовать интерфейсы в другом файле

export class MyComponent {
    cust: ApiModel.Customer; 
}

Выглядит хорошо, но есть одна вещь, которую я до сих пор не понимаю. Как я могу отделить новый экземпляр класса Customer и присвоить ему некоторые свойства? Как я могу присвоить свойства объекту, который, как в данном случае, является просто свойством пространства имен?

Большое спасибо

1 Ответ

0 голосов
/ 30 августа 2018

Как я могу объявить новый экземпляр класса Customer и присвоить ему некоторые свойства? Чтобы объявить новый экземпляр класса, сначала нужно объявить класс, который реализует ваш интерфейс:

namespace MyNamespace {
    export interface ICustomer {
        id: number;
        name: string;
    }
}

class Customer implements MyNamespace.ICustomer {
    id: number;
    name: string;

    constructor(id: number, name, string) {
        this.id = id;
        this.name = name;
    }
}

Теперь вы можете создавать Customer класс.

Как я могу назначить свойства объекту, который, как в данном случае, является просто свойством пространства имен? Пространство имен не имеет свойств. Классы и интерфейсы, которые могут находиться в вашем пространстве имен. Вы можете создать объект customer, который имеет те же свойства, что и интерфейс:

const customer = {
    id: 1, name: "Mr. Bean"
} as MyNamespace.ICustomer;

Система типов TypeScript является структурной, а не номинальной, в отличие от C # или C ++. Вот почему вы можете создать customer, поскольку структура объекта одинакова.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...