typescript - 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 类的新实例并为其分配一些属性? 要声明一个类的新实例,您首先需要声明一个实现您的接口的类:
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
,因为对象结构是相同的。
希望这可以帮助!
推荐阅读
- laravel - Laravel 显示 PHP 代码而不是执行它
- java - 如何使用 Java 8 Streams 收集 int[][] 类型的每一行的第一个元素
- javascript - ReactJS:如果在承诺解决后通过身份验证,则呈现私有路由
- linkedin - 领英 API 访问
- javascript - 安装节点版本高于当前系统节点版本的 NPM 包时,如何抛出“在包中找到较低的节点版本”错误?
- r - 从包含特定列中的字符串的数据框中删除行
- animation - 如何在颤动应用程序中颤动洛蒂动画?
- spacy - 为什么像底部、四十、五十、一等这样的词被归类为停用词?
- puppet - 为什么通常首选类包含声明,但配置文件类不应该使用它们来声明组件类?
- java - 三位数彩票