聊聊项目中常见的TypeScript错误
TypeScript 错误信息由错误码和详细信息组成。聊聊例如:TS2456 ,项目其中错误码是中常以“TS”开头 + 数字(一般是 4 位数字)结尾这样的格式组成的字符串,用来作为特定类型错误的错误专属代号。下面我们看一下那些常⻅,聊聊但在官方文档甚少提及的项目类型错误:1.TS2456
首先是由于类型别名循环引用了自身造成的 TS2456 类型错误,如下示例:

type T = Readonly
在上面这个例子中,中常对于 T 这个类型别名,错误如果 TypeScript 编译器想知道 T 类型是聊聊什么,就需要展开类型别名赋值的项目 Readonly 。而为了确定 Readonly 的中常类型,TypeScript 编译器需要继续判断入参 T 的错误类型,这就形成了一个循环引用,聊聊类似函数循环调用自己,项目如果没有正确的中常终止条件,就会一直处于无限循环的状态,所以就会报错。
2.TS2554另一个常⻅的错误就是TS2554,亿华云计算它是由于形参和实参个数不匹配造成的,如下:
function test(a: number | undefined): string {
if (a=== undefined) {
return ;
}
return a.toString();
}
test(); // TS2554: Expected 1 arguments, but got 0.
test(undefined);之所以会报错是因为在 ts 中,undefined 是一个特殊的类型,由于类型为 undefined,并不代表可 缺省,因此示例中的第 8 行提示了 TS2554 错误。
3.TS1169TS1169 类型错误是在接口类型定义中由于使用了非字面量或者非唯一 symbol 类型作为属性名造成 的,如下:
interface Obj {
[key in id | name]: any; // TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique symbol type.
};因为interface 类型的属性必须是字面量类型(string、number) 或者是 unique symbol 类型,所以 在第 2 行提示了 TS1169 错误。
4.TS2345TS2345 类型错误的原因在于传参时由于类型不兼容造成的,如下:
enum A {
x = x,
y = y,
z = z,
}
enum B {
x = x,
y = y,
z = z,
}
function fn(val: A) {}
fn(B.x); // TS2345: Argument of type B.x is not assignable to parameter of type A. ;如上所示,函数 fn 参数的 val 类型是枚举 A,在 12 行我们传入了与枚举 A 类似的枚举 B 的值,此时 ts 提示了类型不匹配的错误。云服务器提供商这是因为枚举是在运行时真正存在的对象,因此 ts 并不会判断两个枚举是否可以互相兼容,所以报错。解决这个错误的方式也很简单,我们只需要让这两个枚举类型互相兼容就行,比如使用类型断言绕过 ts 的类型检查(fn((B.x as unknown) as A);)即可。
5.TS2589TS2589 类型错误是由泛型实例化递归嵌套过深造成的,如下:
type RepeatX
type T1 = RepeatX<5>; // => ["X", "X", "X", "X", "X"]
// TS2589: Type instantiation is excessively deep and possibly infinite.因为第 1 行的泛型 RepeatX 接收了一个数字类型入参 N,并返回了一个⻓度为 N、元素都是 X 的数组类型,所以第 4 行的类型 T1 包含了 5 个 "X" 的数组类型;但是第 6 行的类型 T2 的类型却是 any,并且提 示了 TS2589 类型错误。这是因为 ts 在处理递归类型的时候,最多实例化 50 层,b2b供应网如果超出了递归层数的 限制,ts 便不会继续实例化,并且类型会变为 top 类型 any。 对于上面的错误,我们使用 @ts-ignore 注释忽略即可。
6.TS2322TS2322 错误是由于字符串字面量类型定义时导致的错误,如下:
interface CSSProperties {
display: block | flex | grid;
}
const style = {
display: flex,
};
// TS2322: Type { display: string; } is not assignable to type CSSProperties.
// Types of property display are incompatible.
// Type string is not assignable to type "block" | "flex" | "grid".
const cssStyle: CSSProperties = style;在上面的例子中,CSSProperties 的 display 属性的类型是字符串字面量类型 block | flex | grid,虽然变量 style 的 display 属性看起来与 CSSProperties 类型完全兼容,但是 TypeScript 提示了 TS2322 类型不兼容的错 误。这是因为变量 style 的类型被自动推断成了 { display: string },string 类型自然无法兼容字符串字面量类型 block | flex | grid,所以变量 style 不能赋值给 cssStyle。
以上六种便是项目开发中比较常见的几种错误类型,如果你想查看所有的错误信息和错误码,可以浏览TypeScript 的源代码仓库,当然,随着 ts 版本的更新,官网也会逐渐增加更多新的类型错误。
相关文章
- 摘要:在当前科技迅猛发展的时代,电脑已经成为我们日常生活中不可或缺的工具之一。无论是工作、娱乐还是学习,我们都需要一个强大而稳定的电脑来满足我们的需求。而其中最关键的组件就是处理器。今天...2025-11-05
无锡梦之岛出售6s,是一次明智的选择吗?(探索无锡梦之岛卖6s的优势与挑战,拥抱创新科技的浪潮)
摘要:无锡梦之岛作为一座现代化主题公园,一直秉持着创新和娱乐的理念。最近,梦之岛决定推出6s的销售活动,引起了广泛关注。本文将探讨这一举措带来的优势和面临的挑战,为大家分析是否购买6s是...2025-11-05以果时代U盘的使用体验(功能强大,便携实用,让您的数据安全无忧)
摘要:作为现代人离不开的数字储存设备之一,U盘在我们的生活中起着重要的作用。然而,在市面上的U盘产品中,以果时代U盘凭借其功能强大、便携实用的特点,成为了人们首选的品牌之一。本文将从多个...2025-11-05Win8激活方法教程-简单步骤解锁操作系统(轻松激活您的Windows8系统,尽享完整功能体验)
摘要:Windows8是微软发布的一款极具创新的操作系统,然而,对于许多用户来说,激活Windows8仍然是一项挑战。在本篇文章中,我们将为您提供一份详细的Win8激活方法教程,帮助您轻...2025-11-05- Wireshark 是一个基于 GUI 的数据包捕获和嗅探工具。该工具被网络管理员普遍使用,网络安全工程师或开发人员对于各种任务的数据包级的网络分析是必需的,例如在网络故障,漏洞测试,应用程序调试,或2025-11-05
解决电脑中无法删除的文件夹问题(探索文件夹无法删除的原因及解决方法)
摘要:在使用电脑时,我们经常会遇到一些无法删除的文件夹,这给我们的日常使用带来了困扰。本文将针对文件夹无法删除的问题进行分析,并提供一些解决方法,帮助读者顺利解决这一问题。症状分...2025-11-05

最新评论