网易首页 > 网易号 > 正文 申请入驻

项目中常见的TypeScript错误汇总

0
分享至

新钛云服已为您服务1431

TypeScript 错误信息由错误码和详细信息组成。例如:TS2456 ,其中错误码是以“TS”开头 + 数字(一般是 4 位数字)结尾这样的格式组成的字符串,用来作为特定类型错误的专属代号。

下面我们看一下那些常⻅,但在官方文档甚少提及的类型错误

一、TS2456

首先是由于类型别名循环引用了自身造成的 TS2456 类型错误,如下示例:

type T = Readonly < T >;

// TS2456: Type alias 'T' circularly references itself.

在上面这个例子中,对于 T 这个类型别名,如果 TypeScript 编译器想知道 T 类型是什么,就需要展开类型别名赋值的 Readonly 。而为了确定 Readonly 的类型,TypeScript 编译器需要继续判断入参 T 的类型,这就形成了一个循环引用,类似函数循环调用自己,如果没有正确的终止条件,就会一直处于无限循环的状态,所以就会报错。

二、TS2554

另一个常⻅的错误就是TS2554,它是由于形参和实参个数不匹配造成的,如下:

functiontest (a : number |undefined) : string {

if(a ===undefined) {

return'' ;

returna . toString () ;

test () ; // TS2554: Expected 1 arguments, but got 0.

test (undefined) ;

之所以会报错是因为在 ts 中,undefined 是一个特殊的类型,由于类型为 undefined,并不代表可 缺省,因此示例中的第 8 行提示了 TS2554 错误。

三、TS1169

TS1169 类型错误是在接口类型定义中由于使用了非字面量或者非唯一 symbol 类型作为属性名造成 的,如下:

interfaceObj {

[keyin'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 错误。

四、TS2345

TS2345 类型错误的原因在于传参时由于类型不兼容造成的,如下:

enumA {

x = 'x' ,

y = 'y' ,

z = 'z' ,

enumB {

x = 'x' ,

y = 'y' ,

z = 'z' ,

functionfn (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);)即可。

五、TS2589

TS2589 类型错误是由泛型实例化递归嵌套过深造成的,如下:

t ype RepeatX < Nextendsnumber , Textendsany[] = [] > = T[ 'length' ]extendsN ? T : RepeatX < N , [ ... T , 'X' ] >;

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 层,如果超出了递归层数的 限制,ts 便不会继续实例化,并且类型会变为 top 类型 any。

对于上面的错误,我们使用 @ts-ignore 注释忽略即可

六、TS2322

TS2322 错误是由于字符串字面量类型定义时导致的错误,如下:

interfaceCSSProperties {

display : 'block' | 'flex' | 'grid' ;

conststyle = {

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"'.

constcssStyle : CSSProperties = style ;

在上面的例子中,CSSProperties 的 display 属性的类型是字符串字面量类型 'block' | 'flex' | 'grid',虽然变量 style 的 display 属性看起来与 CSSProperties 类型完全兼容,但是 TypeScript 提示了 TS2322 类型不兼容的错 误。这是因为变量 style 的类型被自动推断成了 { display: string },string 类型自然无法兼容字符串字面量类型 'block' | 'flex' | 'grid',所以变量 style 不能赋值给 cssStyle

以上六种便是项目开发中比较常见的几种错误类型,如果你想查看所有的错误信息和错误码,可以浏览TypeScript 的源代码仓库,当然,随着 ts 版本的更新,官网也会逐渐增加更多新的类型错误。

了解新钛云服

往期技术干货

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
不知不觉都老了,这两位演员已经不在了,你还记得他们吗?

不知不觉都老了,这两位演员已经不在了,你还记得他们吗?

阿废冷眼观察所
2026-04-11 17:02:28
A股首例!比亚迪财务总监年薪破千万

A股首例!比亚迪财务总监年薪破千万

鞭牛士
2026-04-13 13:29:19
二百多名军官被枪毙、撤职、处分,长津湖战役中失职的志愿军88师

二百多名军官被枪毙、撤职、处分,长津湖战役中失职的志愿军88师

云霄纪史观
2026-03-25 12:16:14
湖人队常规赛数据:投篮命中率50.2%全联盟第一,得分第11失分第12

湖人队常规赛数据:投篮命中率50.2%全联盟第一,得分第11失分第12

懂球帝
2026-04-13 13:19:09
出生一个月后,她被陈丽华收养,如今是集团董事,享有同等继承权

出生一个月后,她被陈丽华收养,如今是集团董事,享有同等继承权

云景侃记
2026-04-09 19:48:26
松岛辉空教练:决赛输王楚钦他很难过 他本想把奖杯送我当生日礼物

松岛辉空教练:决赛输王楚钦他很难过 他本想把奖杯送我当生日礼物

818体育
2026-04-12 19:28:46
为何好多小国都莫名其妙反华?马斯克一语道破本质

为何好多小国都莫名其妙反华?马斯克一语道破本质

兴史兴谈
2026-04-06 02:41:27
广州管道燃气价格和广州地铁票价格或将涨价!

广州管道燃气价格和广州地铁票价格或将涨价!

娱乐圈的笔娱君
2026-04-13 06:34:41
大陆释出10项惠台政策,蒋万安:民进党当局不要卡关,要以民生为念

大陆释出10项惠台政策,蒋万安:民进党当局不要卡关,要以民生为念

海峡导报社
2026-04-13 11:20:18
面瘫演技也能火?三宫椿这波操作颠覆认知!

面瘫演技也能火?三宫椿这波操作颠覆认知!

孤独的独角兽影视
2026-02-11 09:55:11
重庆某设计院发低保:员工穷到绝望!

重庆某设计院发低保:员工穷到绝望!

黯泉
2026-04-12 20:09:56
从今年起,需做好“潮水暴涨”前的准备?明年房子或将超出想象

从今年起,需做好“潮水暴涨”前的准备?明年房子或将超出想象

专业聊房君
2026-04-12 18:43:23
美军称将对伊朗港口海上交通实施封锁,天然气、原油跳空暴涨

美军称将对伊朗港口海上交通实施封锁,天然气、原油跳空暴涨

东方豪侠
2026-04-13 08:17:42
我把老公血糖从11.8控到5.5 却越控越怕

我把老公血糖从11.8控到5.5 却越控越怕

普陀动物世界
2026-04-13 10:11:10
连夜自查!多款牙膏问题被查出砷超标1.5倍,千万别再给家人用了!

连夜自查!多款牙膏问题被查出砷超标1.5倍,千万别再给家人用了!

童童聊娱乐啊
2026-04-12 12:27:12
哈工大解剖398名乳腺癌死者,惊讶发现患乳腺癌的人,有几大特点

哈工大解剖398名乳腺癌死者,惊讶发现患乳腺癌的人,有几大特点

坠入二次元的海洋
2026-04-13 11:44:25
新加坡网友发帖:“我接受不了自己以游客身份进入中国”。

新加坡网友发帖:“我接受不了自己以游客身份进入中国”。

荆楚寰宇文枢
2026-04-11 17:21:54
热议廖力生手球争议:当值裁判是疑罪从无;应增加转播角度

热议廖力生手球争议:当值裁判是疑罪从无;应增加转播角度

懂球帝
2026-04-13 13:19:09
2艘美军驱逐舰“穿越”霍尔木兹海峡!这到底是啥情况?

2艘美军驱逐舰“穿越”霍尔木兹海峡!这到底是啥情况?

战风
2026-04-12 11:33:21
王楚然这组蓝裙封神!把“清冷氛围感”焊在身上了

王楚然这组蓝裙封神!把“清冷氛围感”焊在身上了

赏心悦目的我
2026-04-12 05:16:23
2026-04-13 14:04:49
新钛云服
新钛云服
云管理服务专家
465文章数 30关注度
往期回顾 全部

科技要闻

传荣耀与字节跳动接洽“豆包手机”合作

头条要闻

毛焦尔:匈牙利将再次成为欧盟和北约国家的坚定盟友

头条要闻

毛焦尔:匈牙利将再次成为欧盟和北约国家的坚定盟友

体育要闻

一支球队不够烂,也是一种悲哀

娱乐要闻

贾玲减重后现身冯巩生日宴 身材未反弹

财经要闻

封锁,还是收费站?

汽车要闻

不止命名更纯粹 领克10/10+要做纯电操控新王

态度原创

手机
亲子
房产
家居
艺术

手机要闻

联想拯救者手机回归:Y70新一代官宣5月见,号称“为战而生”

亲子要闻

骨骺提前闭合,长高就困难了!这三个坏习惯一定要改掉!

房产要闻

土地供应突然暴跌!2026海口楼市,格局大变!

家居要闻

复古风格 自然简约

艺术要闻

22位中国当代名家油画作品

无障碍浏览 进入关怀版