Typescript 踩坑记录

2,539 阅读1分钟
  1. 不能将类型“Timeout”分配给类型“number”。

    调用 setInterval 或者 setTimeout 的返回值在 Typescript 中默认并不是一个 number 类型,所以要手动将这两个方法绑定到 window 对象上,window 对象的 setInterval 和 setTimeout 返回的是 number。代码如下:

    const timer = window.setTimeout(() => {}, 3000);
    const timer = window.setInterval(() => {}, 3000);
    
  2. 当使用的第三方库没有 ts 声明文件时,当在 tsx 文件中通过 import 引入这个库时,会提示 找不到模块 xxx 或其相应的类型声明。

    首先需要在 tsconfig.json 中增加如下配置:

     {
            "compilerOptions": {
               "typeRoots": [
                    "./@types",
                    "./node_modules/@types"
               ]
      }
    

    然后同目录下新建 @types 文件夹,文件夹内新建文件 xxx.d.ts 文件,增加声明模块语句 declare module "xxx"。以下是在 tsx 文件中 import 图片时,需要添加图片模块声明文件:

    declare module "*.png";
    declare module "*.svg";
    declare module "*.jpg";
    

    常用的还有一些定义在 window 对象上的自定义方法和对象的声明,如下:

    interface Window {
      MPing?: any; // 自定义对象
      goToARStreet: (isJDApp: boolean) => void; // 自定义方法
    }