TS - 扩展模块类型时要在顶级处添加 export {}
如果在 .d.ts
文件中扩展 Element、HTMLElement 这种内置的全局类型接口时,直接写就可以了。
file:[types/shim-elems.d.ts]
declare interface Element {
innerText?: string;
}
如果扩展的是第三方模块,比如 axios。还是按照上面这样的做法是不对的,这相当于在全局声明了一个 AxiosInstance,并没有扩展到第三方模块里面的 AxiosInstance 类型。
file:[types/shim-axios.d.ts]
declare module "axios" {
interface AxiosInstance {
ejectReq: () => AxiosInstance;
ejectRes: () => AxiosInstance;
}
}
所以,对于上述情况,我们需要在顶处添加一个 export {}
或者 import
语句,export {}
确保该文件不会覆盖 axios 模块下原来的类型。
file:[types/shim-axios.d.ts]
export {};
declare module "axios" {
interface AxiosInstance {
ejectReq: () => AxiosInstance;
ejectRes: () => AxiosInstance;
}
}