You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TypeScript模板字面量类型遇TS4081与TS1110错误求助

TypeScript模板字面量类型报错TS4081和TS1110,私有名称为空字符串

问题描述

我在使用TypeScript的模板字面量类型时遇到了两个少见的编译错误,示例代码如下(即使移除中间的YesNo类型仍会报错):

src/temp.ts:

export const yes_no = ["yes", "no"] as const

export type YesNo = (typeof yes_no)[number]

export type TemplateLiteralType = `Does this work ${YesNo}`

按照模板字面量类型的语法规则,这段代码应该是合法的,而且我记得之前能正常运行,但现在tsc编译时报出以下错误:

src/temp.ts:5:34 - error TS4081: Exported type alias 'TemplateLiteralType' has or is using private name ''.

src/temp.ts:5:35 - error TS1110: Type expected.

注意错误信息里的私有名称是空字符串'',想知道这是模板字面量类型的规则变了,还是编译器bug,或者其他原因导致的?

解决方案

这种错误几乎都是TypeScript版本过低导致的:模板字面量类型是在TypeScript 4.1版本才正式引入的语法特性。如果你的项目使用的TS版本低于4.1,编译器无法正确解析模板字面量的语法,就会抛出这种莫名其妙的错误(因为它不认识${}在类型中的用法,把它当成了非法语法)。

解决步骤:

  • 升级TypeScript到4.1及以上版本,比如执行命令:
    npm install typescript@latest --save-dev
    
  • 重新运行编译命令,此时代码应该能正常通过编译,TemplateLiteralType会被正确推导为"Does this work yes" | "Does this work no"的联合类型。

另外可以顺带检查tsconfig.json的配置,确保compilerOptions.target不低于ES2015,lib包含ES2015或更高版本,但核心问题还是版本支持。

内容的提问来源于stack exchange,提问作者Niki Herl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:22:19