- 类不能与其它类或变量合并
- 针对同一个名字的两个独立声明合并为单一声明。
- 合并后的声明同时拥有原先两个声明的特性。
- 任何数量的声明都可被合并;不局限于两个声明
基础概念
- ts中的声明会创建三种实体之一:命名空间,类型或值。
- 创建命名空间的声明: 新建一个命名空间,它包含了用(.)符号来访问使用的名字
- 创建类型的声明是:用声明的模型创建一个类型并绑定到给定的名字上
- 创建值的声明: 创建在JavaScript输出中看到的值
合并接口: 把双方的成员放到一个同名的接口里
- 接口的非函数的成员应该是唯一的(就是上面接口有一个a ,下面的接口最好不要有a),且类型要相同
1
2
3
4
5
6
7
8interface Box {
a: string,
b :string
}
interface Box {
c : string
}
let box : Box = {a : "d" , b : "k" ,c : "10"} - 对于函数成员,每个同名函数声明,都会当成这个函数的一个重载,且后来合并的接口优先级更高
1
2
3
4
5
6
7
8
9
10
11
12
13
14interface Box {
clone (animal : Dog) : Dog
}
interface Box {
clone (animal : Sheep) : Sheep
clone (animal : Fish) : Fish
clone (tagName : "yyyy") : vjukg
}
等同于 :interface Box{
clone (tagName : "yyyy") : vjukg //参数的类型是单一的字符串字面量的也会提到最前面
clone (animal : Sheep) : Sheep //后来合并的接口顺序往前
clone (animal : Fish) : Fish
clone (animal : Dog) : Dog
}
合并命名空间: namespace xxx{}
- 非export成员合并后仅在原有命名空间可见(因为没有导出),无法访问非export成员