Typescript使用三方包的时候,如果确定参数的类型?

对于TS来说,我就是个菜鸡,最近使用vue+typescript,让我疑惑的是,我使用三方包的时候,我怎么确定三方包里面参数的类型,到底改使用那个?
例如axios


import axios, { AxiosResponse, AxiosRequestConfig } from "axios";
import { Message } from "element-ui";
import router from "@/router";
const service = axios.create({
  timeout: 10000
});

service.interceptors.request.use(
  (config: AxiosRequestConfig) => {
    if (localStorage.tsToken) {
      config.headers.Authorization = localStorage.tsToken;
    }
    return config;
  },
  (error: any) => {
    Promise.reject(error);
  }
);

例如以上代码,怎么知道config的类型就是AxiosRequestConfig,response的类型就是AxiosResponse,难道是根据名字来的吗?
image.png
这里引入了错误类型,但是又报错了,如何才能快速找到这个参数的类型,这个问题困惑很久了,

你期待的结果是什么?实际看到的错误信息又是什么?

例如我需要使用其他三方包,改如何快速找到某个参数的类型,求大佬解答,是在index.d.ts里面吗?有什么技巧快速定位一个参数的类型

阅读 4.3k
3 个回答

typescript怎么知道类型的

类型就是标注在index.d.ts里面。
image.png

如何获得参数类型

如果你项目typescript配置正确, 编辑器支持良好的话(vscode应该没问题),那你鼠标移动到变量上面,应该就可以看到对应的类型(只要有index.d.ts),就和java等其他静态类型语言一样。

response是Axios.Response类型

error是any类型

第三方库呢

道理一样,只要它支持typescript,有index.d.ts,就一样。不支持的话,typescript里面都是any。

鼠标悬浮在对应方法名上,就可以看到参数和返回值的类型声明,alt+点击可以跳转至声明区域。

怎么知道config的类型就是AxiosRequestConfig?response的类型就是AxiosResponse?
service.interceptors.request.use
service.interceptors.response.use

去看这两个函数的第一个参数声明

新手上路,请多包涵

使用其它的JavaScript库
要想描述非TypeScript编写的类库的类型,我们需要声明类库所暴露出的API。

我们叫它声明因为它不是“外部程序”的具体实现。 它们通常是在 .d.ts文件里定义的。 如果你熟悉C/C++,你可以把它们当做 .h文件。

引用自ts模块章节
推荐问题