TypeScript报错:'SomeExample'仅为类型却被用作值,求排查
解决TypeScript报错:
'SomeExample' only refers to a type, but is being used as a value 错误原因
问题出在类型定义文件与实际JS导出不匹配:
- 你的JS库代码(
the-lib/index.js)导出的是一个运行时存在的值SomeExample - 但对应的类型定义文件(
the-lib/index.d.ts)只导出了一个TypeScript类型SomeExample
TypeScript类型检查时仅读取.d.ts中的定义,它无法感知JS代码里导出的同名值,因此会把业务代码中使用的SomeExample判定为类型,而你实际是把它当作值来使用,最终触发报错。
解决方案
修改the-lib/index.d.ts,让它同时声明导出的值及其类型,以下两种写法都可以:
写法一:分别声明类型和值
// 定义类型结构 export type SomeExample = Record<string, string[]>; // 声明导出的变量符合该类型 export const SomeExample: SomeExample;
写法二:先声明值的类型,再导出类型别名
// 先声明导出的变量及其类型 export const SomeExample: Record<string, string[]>; // 将变量的类型导出为类型别名,方便后续做类型标注 export type SomeExample = typeof SomeExample;
修改完成后,TypeScript就能正确识别SomeExample既是运行时可用的值,也是可用于类型约束的类型。
内容的提问来源于stack exchange,提问作者Rose
相关产品推荐
相关产品推荐

