扩展第三方模块的类型时要在顶级处添加 export {}
比如 Element、HTMLElement 类型都是内置的全局类型。对于这些类型我们扩展时直接:
declare interface Element {
innerText?: string;
}
扩展 axios 中的 AxiosInstance 时,我们像下面这样做是不会影响到 axios 中的 AxiosInstance 的,这就相当于我们在全局范围内声明了一个 AxiosInstance。
declare interface AxiosInstance {
ejectReq: () => AxiosInstance;
ejectRes: () => AxiosInstance;
}
我们的目的是扩展 axios 模块中的 AxiosInstance,因此如下面这样做:
declare module "axios" {
interface AxiosInstance {
ejectReq: () => AxiosInstance;
ejectRes: () => AxiosInstance;
}
}
但是,这样会导致原本的类型推断全部失效。我们需要在顶处添加一个 export {} 或者 import 语句:
export {};
declare module "axios" {
interface AxiosInstance {
ejectReq: () => AxiosInstance;
ejectRes: () => AxiosInstance;
}
}
export {} 确保该文件不会覆盖 axios 模块下原来的类型。