TypeScript中类Bar声明前被使用报错,如何将bar声明为常量?
解决TypeScript中"Class 'Bar' used before its declaration"错误(保留const声明)
我之前也碰到过一模一样的问题——明明类定义好了,但用const声明实例时就报错,不想改成var或者把声明塞到函数里,毕竟const的语义更贴合场景。刚好有两个靠谱的方案能解决:
先还原下问题场景
你定义的Bar类和主文件里的代码大概是这样的:
// libs/Bar.ts class Bar { private readonly foo: string; constructor() { this.foo = "foo"; } } // 主文件 const bar: Bar = new Bar(); // 报错:Class 'Bar' used before its declaration
问题根源是TypeScript把项目编译成单个JS文件时,类的声明代码被放到了使用它的代码后面,导致运行时出现提前引用的错误。
解决方案
方案1:@Fenton提出的可行方案
这个方案亲测有效,你可以按照他的思路调整代码结构来解决问题。
方案2:通过tsconfig.json调整编译优先级
这是一个不用改代码的配置方案,通过指定编译顺序来让Bar类先被编译:
在你的tsconfig.json里添加files配置项,把libs/Bar.ts放在最前面,这样TypeScript会优先编译这个文件,生成的JS里类声明就会出现在使用代码之前了:
{ "files": [ "libs/Bar.ts" ], "include": [ "**/*" ] }
配置完成后,主文件里的const bar: Bar = new Bar();就能正常运行,完美保留const的声明方式~
内容的提问来源于stack exchange,提问作者user8593176
相关产品推荐
相关产品推荐

