对于初学Typescript的同学来说,声明文件一定是一个让人十分头疼、但是怎么也绕不开的问题。声明文件的书写和声明合并在Typescript官方文档里面已经有比较详细的介绍,这里不再陈述。我们重点讨论的是如何扩展第三方模块中的类型。
类型扩展的基本原则
如何扩展第三方模块中的类型,有三条基本原则:
同模块:声明合并只能在同一个模块中进行
同路径:声明的模块路径必须与目标类型(你将要扩展的类型)的原始声明文件路径保持一致
同书写方式:声明书写方式必须与目标类型一致
下面来详细展开
原则一:同模块
声明合并只能在同一个模块中进行。意思是说,在扩展一个类型之前,你需要先引入这个类型所在的模块。
在下面这个例子中,我们需要为接口Foo扩展一个属性Bar,Foo是在moduleOfFoo中声明的,为此我们需要先引入moduleOfFoo:
// 引入`Foo`所在的模块`moduleOfFoo`,这一步非常重要
import 'moduleOfFoo'
然后我们需要声明一个同名的模块,在模块内部进行Foo的声明合并
// 引入`Foo`所在的模块`moduleOfFoo`,这一步非常重要
import 'moduleOfFoo'
// 声明同名模块
declare module 'moduleOfFoo' {
// 在这个空间内才可以进行声明合并
interface Foo {
Bar: any