【问题标题】:When do you use declare in TypeScript?你什么时候在 TypeScript 中使用声明?
【发布时间】:2019-12-12 15:09:52
【问题描述】:

在 TypeScript 中,为什么有时需要使用 declare 来声明变量,而有时却不需要(同样的问题也适用于函数,...)?

举个例子:我什么时候(以及为什么)使用

declare var foo: number;

如果

let foo: number;

会做同样的事情(至少在我看来好像它做的一样,即他们都声明了一个名为foo 的变量number)。有什么区别?

【问题讨论】:

标签: javascript typescript


【解决方案1】:

你从不使用declare声明一个变量。您只需使用它来让 TypeScript 知道该变量存在,即使它没有在代码中声明(例如,因为它是在其他代码中声明的全局变量,或者因为您要将 tsc 的 JavaScript 输出与另一个声明变量的文件)。或者换一种说法:它只为 TypeScript 编译器声明它,而不是为 JavaScript 运行时声明。

如果您使用 Playground 编译您的 declare var foo: number;,它实际上不会为该声明输出任何内容; example.

相比之下,let foo: number;(或var foo: number;变量声明; example.

【讨论】:

    【解决方案2】:

    typescript 中的 declare 关键字有助于告诉 typescript 编译器声明是在其他地方定义的,希望此链接有助于: http://blogs.microsoft.co.il/gilf/2013/07/22/quick-tip-typescript-declare-keyword/

    【讨论】:

      【解决方案3】:

      在 TypeScript 中,“declare var foo: number;”的意思是:“代码中有一个名为 foo 的数字。我知道你不会检索它。但请相信我,并像你知道的那样行事。 em>" 是一种前向声明,就像你在C/C++中看到的一样。

      示例:

      假设您正在使用 jQuery 编写 TS 脚本。您可以在 HTML 页面的某处包含所有类似这样的 JavaScript:

      <script type="text/javascript" src="jquery.js"></script>
      <script type="text/javascript" src="myscript.js"></script> <!-- generated from TypeScript, with something like "tsc myscript.ts" -->
      

      因此,没有必要在您的 TS 脚本中包含 jQuery,因为从您的 TS 脚本生成的 JS 将了解有关 jQuery 的所有内容。但是,TS 转译器会在您的代码中多次标注 jQuery 的标志性“$()”。您没有在 TS 代码中包含 jQuery(因为没有必要),因此它对“$()”一无所知。因此,它会向您报告很多错误,询问您在代码中随处可见的“$”到底是什么。要解决所有与$ 相关的错误,您将在 TS 脚本的开头写上“declare var $: jQuery;”。通过写这个,你告诉 TS 转译器:

      在代码中有一个名为“$”的变量,其类型为“jQuery”。我知道你不会找回它。但是假设它存在并且请表现得像在代码的前面有一个“import "aTSfile.ts";”完美地向您描述了它(就像我使用它一样的描述)。相信我,JavaScript 会在脚本执行时知道“$REALLY 是什么。不用担心那个。 ;-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-19
        • 2012-04-23
        • 2018-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多