typescript声明文件 可以用于js库兼容ts引入、定义类型使编辑器提示更友好。
本文用于记录ts声明文件中一些技巧,不介绍声明文件的基本用法,基本用法可以参考ts官网。
1. 继承扩展其他模块
比如你的一个模块扩展了 vue,在vue对象上新增了一个方法,那么在你的声明文件中这样定义可以获得编辑器智能提示:
declare module "vue/types/vue" {
interface Vue {
fn():void;
}
}
找到你希望扩展的对象所在的声明文件,然后在对象上加上你的方法或者属性就行,不会覆盖原有的属性。
2. 扩展String等原生对象
如果你希望扩展String,Array等原生对象呢?你需要先新建一个文件,比如叫 extend.d.ts
,写入下内容
interface String {
testFn():void;
}
然后在你的声明文件中引入这个文件就可以啦:
import './extend';
这里只演示了String,其他原始对象的扩展也是同理
3. 函数不确定参数个数
当你的一个函数有不缺定个参数的时候,类似于数组的push方法,解决方法就是使用 扩展运算符
declare function fn(...items: Array<string>): string;
上面定义的函数fn支持任意个数的字符串参数
4. json对象不确定属性
当你要声明一个json对象,但是不缺定属性时可以这么写
declare interface json { [key: string]: any }