【TypeScript系列】声明合并

声明合并

介绍

TypeScript中有些独特的概念可以在类型层面上描述JavaScript对象的模型。 这其中尤其独特的一个例子是“声明合并”的概念。 理解了这个概念,将有助于操作现有的JavaScript代码。 同时,也会有助于理解更多高级抽象的概念。

对本文件来讲,“声明合并”是指编译器将针对同一个名字的两个独立声明合并为单一声明。 合并后的声明同时拥有原先两个声明的特性。 任何数量的声明都可被合并;不局限于两个声明。

基础概念

TypeScript中的声明会创建以下三种实体之一:命名空间,类型或值。 创建命名空间的声明会新建一个命名空间,它包含了用(.)符号来访问时使用的名字。 创建类型的声明是:用声明的模型创建一个类型并绑定到给定的名字上。 最后,创建值的声明会创建在JavaScript输出中看到的值。

Declaration Type Namespace Type Value
Namespace X X
Class X X
Enum X X
Interface X
Type Alias X
Function X
Variable X

理解每个声明创建了什么,有助于理解当声明合并时有哪些东西被合并了。

合并接口

最简单也最常见的声明合并类型是接口合并。 从根本上说,合并的机制是把双方的成员放到一个同名的接口里。

interface Box {
   
    height: number;
    width: number;
}

interface Box {
   
    scale: number;
}

let box: Box = {
   height: 5, width: 6, scale: 10};

接口的非函数的成员应该是唯一的。 如果它们不是唯一的,那么它们必须是相同的类型。 如果两个接口中同时声明了同名的非函数成员且它们的类型不同,则编译器会报错。

对于函数成员,每个同名函数声明都会被当成这个函数的一个重载。 同时需要注意,当接口A与后来的接口A合并时,后面的接口具有更高的优先级。

如下例所示:

interface Cloner {
   
    clone(animal: Animal): Animal;
}

interface Cloner {
   
    clone(animal: Sheep): Sheep;
}

interface Cloner {
   
    clone(animal: Dog): Dog;
    clone(animal: Cat): Cat;
}

这三个接口合并成一个声明:

interface Cloner {
   
    clone(animal: Dog): Dog;
    clone(animal: Cat): Cat;
    clone(animal: Sheep): Sheep

相关推荐

  1. TypeScript系列声明合并

    2024-03-16 18:30:03       27 阅读
  2. TypeScript 中的声明合并

    2024-03-16 18:30:03       10 阅读
  3. TypeScript系列声明文件

    2024-03-16 18:30:03       15 阅读
  4. TypeScript声明合并简介以及使用方法】

    2024-03-16 18:30:03       12 阅读
  5. TypeScript声明文件

    2024-03-16 18:30:03       39 阅读
  6. TypeScript 第十三节:声明文件

    2024-03-16 18:30:03       32 阅读
  7. TypeScript系列TypeScript 基础类型

    2024-03-16 18:30:03       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-16 18:30:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-16 18:30:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-16 18:30:03       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-16 18:30:03       20 阅读

热门阅读

  1. python前端开发

    2024-03-16 18:30:03       26 阅读
  2. 数据智能——企业从业务数据化走向业务智能化

    2024-03-16 18:30:03       23 阅读
  3. 游戏测试 - 二面 - 创梦天地二面

    2024-03-16 18:30:03       24 阅读
  4. 测试覆盖率那些事

    2024-03-16 18:30:03       22 阅读
  5. C/C++蓝桥杯之整数拼接(较难)

    2024-03-16 18:30:03       21 阅读
  6. 机器学习模型—CatBoost

    2024-03-16 18:30:03       20 阅读