在typescript定义中声明var和声明const有什么区别?



我最近从一个TypeScript文件中引用了几个全局变量,TypeScript标记了以下错误:

Property 'msSpeechRecognition' does not exist on type 'Window & typeof globalThis'.

所以我创建了以下代码添加到我的env.d.ts(由create-vuetsconfig.json中生成和引用):

declare const msSpeechRecognition: undefined | SpeechRecognitionStatic;

这并没有解决问题。但是,当我将代码转换为以下代码时:

declare var msSpeechRecognition: undefined | SpeechRecognitionStatic;

参考msSpeechRecognition的错误消失。我理解JavaScript中constvar之间的差异,但是在类型声明中使用它们时有什么差异?

当用string替换SpeechRecognitionStatic时,我无法重现同样的问题,所以我知道这与SpeechRecognitionStatic类型有关。这是它的样子(来自@types/webspeechapi):

interface SpeechRecognitionStatic {
prototype: SpeechRecognition;
new (): SpeechRecognition;
}

错误指示msSpeechRecognition作为window.msSpeechRecognitionwindow对象访问。您只能通过使用var声明向globalThis添加某些内容。如果您想使用const,则需要将对window.msSpeechRecognition的引用替换为msSpeechRecognition

最新更新