TypeScript 常见错误整理

Tips: 善用右侧导航和 Ctrl+F 搜索哦

## TS2307: Cannot find module 'moduleA'.

假设我们有一个导入语句 import { a } from "moduleA", 为了去检查任何对 a 的使用, 编译器回去寻找关于它的定义, 这会去向上寻找 moduelA.

但 moduleA 会写在某个 .ts 或是 .d.ts 文件中, 如果没有找到对应的类型定义去解析这个模块, 可能会抛出一个 error TS2307: Cannot find module 'moduleA'.

解决办法
moduleA 声明定义文件, 如果导入的是一个第三方 npm 包, 可以去社区找到对应的 @types

相关资料

## TS2339: Property 'xxx' does not exist on type 'yyy'.

当使用表达式 yyy.xxx 时, typescript 会尝试从 yyy 对象上解析 xxx 属性, 如果没有找到对应的定义, 则会抛出一个 error TS2339: Property 'xxx' does not exist on type 'yyy'.

解决办法

yyy 对象定义正确的类型

需要注意的是, 如果 yyy 是 window 对象, 则需要定义全局的声明文件, 如果

TS2339: Property 'xxx' does not exist on type 'Window'.

1
2
3
4
5
declare global {
interface Window {
xxx: any;
}
}

这里还是建议 xxx 应该有自己的类型而不是 any.

## TS2531: Object is possibly 'null'.

在访问一个对象上的属性时, 如果该对象可能为 null 则抛出 error TS2531: Object is possibly 'null'.

解决办法

在访问可能为空的对象前判断该对象是否为空

## TS2554: Expected 2 arguments, but got 1.

这是由于调用函数时, 传入参数期望的参数 数量不一致时, 会抛出 error TS2554: Expected 2 arguments, but got 1.

解决办法

  • 如果是自定义函数类型定义的问题, 修改函数的 interface.
  • 如果是调用时传参的问题, 恭喜你, 提前发现了一个错误, Fix it.