温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

TS中最常见的声明合并有哪些

发布时间:2021-12-30 11:05:38 来源:亿速云 阅读:412 作者:小新 栏目:开发技术

小编给大家分享一下TS中最常见的声明合并有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

前言:

在TS中最常见的声明合并:接口合并

在聊接口合并之前,我们先来聊聊声明合并

声明合并:

什么是声明合并?

其实很好理解,TS中的声明合并,指的就是编译器会针对同名的声明合并为一个声明

合并的结果:

合并后的声明会同时拥有原先两个或多个声明的特性

疑问:
那这两个或多个具体指的是什么呢?

其实得分几种情况讲,今天要讲的就是其中一种,最简单也最常见的声明合并类型是接口合并

1.合并接口

我们刚刚说了,“合并后的声明会同时拥有原先两个或多个声明的特性”

接口的合并也是一样,它会将双方的成员放到一个同名的接口里

需要注意的是,接口里面的成员有函数成员和非函数成员,情况有所不一样

1.1非函数成员

例如:

interface Box {
    height: number;
}

interface Box {
    width: number;
}

let box: Box = {height: 2, width: 3};

上述代码中,定义了两个名字都为Box的同名接口(实际开发中,可能来源于不同的文件),最终里面的东西会混合在一起

但是需要注意,以上情况里头的成员都是唯一的,但如果两个接口中同时声明了同名的非函数成员且它们的类型不同,则编译器会报错

1.2函数成员

而对于里头的函数成员来说,每个同名函数声明都会被当成这个函数的一个重载。而且当接口 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;
    clone(animal: Animal): Animal;
}

需要注意两点:

  • 每组接口里的声明顺序不变

  • 各组接口之间的顺序是后来的接口重载出现在靠前位置

不过也有例外:当出现特殊的函数签名时。 如果签名里有一个参数的类型是单一的字符串字面量(比如,不是字符串字面量的联合类型),那么它将会被提升到重载列表的最顶端

以上是“TS中最常见的声明合并有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ts
AI