前言:
回顾上一节的内容,在上一节中我们介绍了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命名空间合并内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

TypeScript命名空间合并讲解的更多相关文章

  1. vue+elemet实现表格手动合并行列

    这篇文章主要为大家详细介绍了vue+elemet实现表格手动合并行列,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. node下使用UglifyJS压缩合并JS文件的方法

    下面小编就为大家分享一篇node下使用UglifyJS压缩合并JS文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  3. Javascript学习笔记之函数篇(六) : 作用域与命名空间

    本文主要讲述了javascript中作用域和命名空间的区别,十分的详细,这里推荐给大家,希望小伙伴能有所收获

  4. 使用typescript类型实现ThreeSum

    这篇文章主要介绍了使用typescript类型实现ThreeSum,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以一下,希望对你学习又是帮助

  5.  typeScript入门基础介绍

    这篇文章主要介绍了 typeScript入门基础,TypeScript 是由微软开发的开源、跨平台的编程语言,是 javaScript 的超集,最终被编译为 javaScript代码。常常被简称为TS支持JS、ES语法,下文将继续其他基础介绍,需要的朋友可以参考一下

  6. typescript返回值类型和参数类型的具体使用

    本文主要介绍了typescript返回值类型和参数类型的具体使用文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  7. Python中的字典合并与列表合并技巧

    这篇文章主要介绍了Python中的字典合并与列表合并技巧,下文围绕主题展开详细的内容介绍,具有一的的参考价值,需要的小伙伴可以参考一下

  8. Javascript实用方法之json合并的场景分析

    这篇文章主要介绍了Javascript实用方法之json合并,jQuery 的“extend()”方法有两个原型:合并的方法,分别是浅合并和深度合并,本文通过代码给大家介绍的非常详细,需要的朋友可以参考下

  9. Vue3 携手 TypeScript 搭建完整项目结构

    TypeScript 是JS的一个超级,主要提供了类型系统和对ES6的支持,使用 TypeScript 可以增加代码的可读性和可维护性,在 react 和 vue 社区中也越来越多人开始使用TypeScript,这篇文章主要介绍了Vue3 携手 TypeScript 搭建完整项目结构,需要的朋友可以参考下

  10. 关于TypeScript开发的6六个实用小技巧分享

    TypeScript是Javascrip t超集,支持静态类型检测,可以在编译期提前暴露问题,节省debug时间,下面这篇文章主要给大家介绍了关于TypeScript开发的6六个实用小技巧,需要的朋友可以参考下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部