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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Typescript - 如何访问通过命名空间声明的类?相关的知识,希望对你有一定的参考价值。

来自初学者的一个快速问题。我目前正在研究减少项目中“进口”数量的方法,并偶然发现了这个教程 - 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类的新实例启用delare并为其分配一些属性?如何为对象分配属性,就像在这种情况下,只是命名空间的属性?

非常感谢

答案

如何声明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,因为对象结构是相同的。

希望这可以帮助!

以上是关于Typescript - 如何访问通过命名空间声明的类?的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript入门八:TypeScript的命名空间

LayaBox---TypeScript---声明合并

C++命名空间成员访问不同文件如何? “命名空间标准”是如何实现的?

TypeScript:如何使现有的命名空间成为全局的?

Typescript 中的“声明全局”是啥?

TypeScript躬行记——命名空间