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

项目中常见的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.

相关推荐
热点推荐
纳尼?火遍全球的越野跑鞋竟是made in china !

纳尼?火遍全球的越野跑鞋竟是made in china !

超级数学建模
2026-01-29 22:50:25
中国留学生被中外联合追捕!在澳向男婴泼热咖啡,逃回国后被找到

中国留学生被中外联合追捕!在澳向男婴泼热咖啡,逃回国后被找到

听风听你
2026-01-31 02:29:48
Lady Gaga东京演唱会上突然暂停表演抨击美移民局:想到那些受害者,我的心就隐隐作痛

Lady Gaga东京演唱会上突然暂停表演抨击美移民局:想到那些受害者,我的心就隐隐作痛

环球网资讯
2026-01-31 15:03:09
和领导的410次开房记录,写着她从临时工到副处长的每一步努力!

和领导的410次开房记录,写着她从临时工到副处长的每一步努力!

闲侃闲侃
2026-01-29 08:36:50
本科已严重饱和的五个专业,1、临床医学,2、法学,3、计算机

本科已严重饱和的五个专业,1、临床医学,2、法学,3、计算机

明智家庭教育
2026-01-31 10:29:14
特斯拉中国开始大幅度降价清仓,真要没了!

特斯拉中国开始大幅度降价清仓,真要没了!

XCiOS俱乐部
2026-01-31 10:48:12
麦当劳新包装被网友称像祭祀用品,客服回应

麦当劳新包装被网友称像祭祀用品,客服回应

黄河新闻网吕梁频道
2026-01-30 16:30:45
全是假的!检测结果触目惊心!很多老人都在吃

全是假的!检测结果触目惊心!很多老人都在吃

华人星光
2026-01-30 11:40:47
知道不好骗了,所以开始硬抢了!

知道不好骗了,所以开始硬抢了!

胖胖说他不胖
2026-01-31 13:36:22
罕见画面公开!歼-20体系化试飞有何意义?

罕见画面公开!歼-20体系化试飞有何意义?

环球网资讯
2026-01-31 14:12:21
港口交易生变?巴拿马港口运营合同被裁定违宪,李嘉诚旗下长和股价大跌!香港政府:强烈不满,企业应认真审视其现时及未来在当地的投资

港口交易生变?巴拿马港口运营合同被裁定违宪,李嘉诚旗下长和股价大跌!香港政府:强烈不满,企业应认真审视其现时及未来在当地的投资

每日经济新闻
2026-01-31 00:00:09
押赴刑场!缅北女魔头明珍珍伏法了,当初迪拜炫富,现在刑场死囚

押赴刑场!缅北女魔头明珍珍伏法了,当初迪拜炫富,现在刑场死囚

今朝牛马
2026-01-30 20:12:32
昨天顿悟,为什么塔利班和伊朗神权也有人支持?

昨天顿悟,为什么塔利班和伊朗神权也有人支持?

修明札记
2026-01-31 11:39:24
张帅斩获大满贯第3冠!携手梅尔滕斯2-0胜出,7年后再夺澳网冠军

张帅斩获大满贯第3冠!携手梅尔滕斯2-0胜出,7年后再夺澳网冠军

全景体育V
2026-01-31 11:03:05
库里23分伤退勇士不敌活塞,坎宁安29分11助攻杜伦21分13板

库里23分伤退勇士不敌活塞,坎宁安29分11助攻杜伦21分13板

湖人崛起
2026-01-31 13:53:38
白银,暴跌!黄金,40年最大跌幅!

白银,暴跌!黄金,40年最大跌幅!

数据宝
2026-01-31 08:13:17
一夜回到解放前!有投资客称忙活一年赚了133万,这两天就亏109万

一夜回到解放前!有投资客称忙活一年赚了133万,这两天就亏109万

火山诗话
2026-01-31 15:08:29
三大PMI全部跌破荣枯线,经济下行的压力比市场预想更为严峻!

三大PMI全部跌破荣枯线,经济下行的压力比市场预想更为严峻!

识局Insight
2026-01-31 15:34:15
女子称退衣服不慎寄走奔驰钥匙 重新配一把要6000多元 希望商家能还给她

女子称退衣服不慎寄走奔驰钥匙 重新配一把要6000多元 希望商家能还给她

闪电新闻
2026-01-31 15:08:35
浙江卫视炸了!7000万网红怒怼评委:你15年没歌凭啥说我?

浙江卫视炸了!7000万网红怒怼评委:你15年没歌凭啥说我?

不写散文诗
2026-01-30 12:16:42
2026-01-31 17:40:49
新钛云服
新钛云服
云管理服务专家
458文章数 30关注度
往期回顾 全部

科技要闻

中国车企和特斯拉的下一战,战场已定

头条要闻

正部级王祥喜任上被查 4天前曾主持会议

头条要闻

正部级王祥喜任上被查 4天前曾主持会议

体育要闻

新时代得分王!东皇37+三双刷7纪录怒吼释放

娱乐要闻

成龙入驻小红书,怼脸近照没有老年斑

财经要闻

白银,暴跌!黄金,40年最大跌幅!

汽车要闻

新款宾利欧陆GT S/GTC S官图发布 V8混动加持

态度原创

时尚
旅游
本地
健康
数码

2026巴黎高定时装周|全世界最美的衣服都在这了

旅游要闻

科技光影碰撞戏剧年味!乌镇60余项新年活动打造新春新体验

本地新闻

云游中国|拨开云雾,巫山每帧都是航拍大片

耳石症分类型,症状大不同

数码要闻

山灵推出MG200开放入耳式动圈耳机:首发价1398元

无障碍浏览 进入关怀版