TypeScript命名空间合并讲解
2022-01-08 04:07
906 查看
目录
前言:
回顾上一节的内容,在上一节中我们介绍了TS中最常见的声明合并:接口合并
我们从中了解了声明合并其实指的就是编译器会针对同名的声明合并为一个声明,合并的结果是合并后的声明会同时拥有原先两个或多个声明的特性
而接口合并的合并需要里面的成员是否有函数成员。对于里头的函数成员来说,每个同名函数声明都会被当成这个函数的一个重载,当接口 A与后来的接口 A合并时,后面的接口具有更高的优先级
今天要讲的内容也是TS中的声明合并,但这次是命名空间相关的合并
主要分两方面来讲,一是同名的命名空间之间的合并,二是命名空间和其他类型的合并。下面会一一讲述
同名的命名空间之间的合并
与接口合并相类似,两个或多个同名的命名空间也会合并其成员
那具体怎么合并呢?
对于同名的命名空间之间的合并,记住一下4点:
- 里头模块导出的同名接口会合并为一个接口
- 对于非导出成员,仅在其原有的(合并前的)命名空间内可见。也就是说合并之后,从其它命名空间合并进来的成员无法访问非导出成员
- 对于里头值的合并,如果里头值的名字相同,那么后来的命名空间的值会优先级会更高
- 对于没有冲突的成员,会直接混入
例如:
namespace Animals { export class Cat { } } namespace Animals { export interface Legged { numberOfLegs: number; } export class Dog { } }
等同于:
namespace Animals { export interface Legged { numberOfLegs: number; } export class Cat { } export class Dog { } }
上述例子中,两个同名的命名空间Animals
,最终合并为一个命名空间,而且结果是三个没有冲突的东西,直接混合在一起了
命名空间和其他类型的合并
命名空间可以与其它类型的声明进行合并,比如与类和函数,比如和枚举类型
合并同名的命名空间和类
例如:
class Album { label: Album.AlbumLabel; } namespace Album { export class AlbumLabel { }//导出 `AlbumLabel`类,好让合并的类能访问 }
命名空间和类的合并,结果是一个类并带有一个内部类
合并同名的命名空间和函数
除了上述的内部类的模式,你在JavaScript
里,创建一个函数稍后扩展它增加一些属性也是很常见的。 TypeScript
使用声明合并来达到这个目的并保证类型安全
例如官方的一个例子:
function buildLabel(name: string): string { return buildLabel.prefix + name + buildLabel.suffix; } namespace buildLabel { export let suffix = ""; export let prefix = "Hello, "; } console.log(buildLabel("Sam Smith"));
同名的命名空间和枚举
可以用来扩展枚举,还是看官方给的例子吧
enum Color { red = 1, green = 2, blue = 4 } namespace Color { export function mixColor(colorName: string) { if (colorName == "yellow") { return Color.red + Color.green; } else if (colorName == "white") { return Color.red + Color.green + Color.blue; } else if (colorName == "magenta") { return Color.red + Color.blue; } else if (colorName == "cyan") { return Color.green + Color.blue; } } }
注意:
并不是所有东西都能合并,需要注意:类不能与其它类或变量合并
到此这篇关于TS命名空间合并讲解的文章就介绍到这了,更多相关TS命名空间合并内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:相关文章推荐
- Android RxJava 实战讲解:合并数据源 & 同时展示数据
- 联营合营企业顺逆流交易在合并报表中抵消分录的原理讲解
- SVN分支和合并问题专家在线讲解
- JavaScript中将数组进行合并的基本方法讲解
- 实例讲解易语言合并整数
- 【转】SVN branches trunk 合并 讲解
- JZOJ4588. 【NOI2016模拟7.7】冷战 + 按秩合并讲解
- 实例讲解SVN分支和合并问题
- 并查集讲解(按秩合并与路径压缩),模板与典型例题
- 【CSS】margin塌陷与合并问题及BFC讲解
- 举例讲解Python中字典的合并值相加与异或对比
- 区间dp讲解之石子合并问题 区间dp的分析方法
- (c语言)02-线性结构1 两个有序链表序列的合并 (15分)(详细讲解)
- 子网合并(上)--理论讲解
- 实例讲解SVN分支和合并问题(转)
- 举例讲解Python中字典的合并值相加与异或对比
- 基于Python中numpy数组的合并实例讲解
- JavaScript中将数组进行合并的基本方法讲解
- 并查集(按秩合并+路径压缩)基础讲解
- python merge、concat合并数据集的实例讲解