Typescript-如何访问通过名称空间声明的类?

时间:2018-08-30 11:00:49

标签: typescript object interface namespaces

一个初学者的快速提问。我目前正在寻找减少项目中“导入”数量的方法,偶然发现了本教程-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 :(得分:0)

如何声明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;

与C#或C ++不同,TypeScript类型系统是结构性的而不是标准的。这就是为什么可以创建customer的原因,因为对象结构是相同的。

希望这会有所帮助!