当前位置: 首页 > 知识库问答 >
问题:

前端 - TypeScript的d.ts文件中 使用declare声明和不使用declare声明有什么区别?

郁宾鸿
2023-10-23

d.ts文件有两种运行模式:
(1)d.ts文件中包含顶层import/export 就是模块运行模式
(2)d.ts文件中不包含 import/export 就是脚本运行模式

对于下面的代码

//xx.d.ts文件的部分代码type A = string;declare type B = string | number;function addWithoutDeclare(a: number, b: number): number{    return a+b;};declare function addWithDeclare(a: number, b: number): number;//声明一个变量let varA;declare let varB;

问题

1.d.ts文件中的 属性 使用declare声明和不适用declare声明有什么区别?
我自己试了下不管有没有declare,其他ts文件中都能正常引用到。

  1. 模块模式和脚本模式下 使用declare声明和不适用declare声明有什么区别

3.书中提到, 每个根几倍的声明都必须以declare关键字作为前缀 这个说法有问题吗?
image.png

共有1个答案

壤驷文华
2023-10-23
  1. d.ts文件中的属性使用declare声明和不使用declare声明有什么区别?

d.ts文件中,declare关键字主要用于声明变量、属性、函数等,但不实际执行任何代码。它告诉TypeScript编译器在类型检查时考虑这个变量或属性,但不要在编译后的JavaScript代码中生成对应的代码。

如果你在d.ts文件中没有使用declare关键字,那么你定义的变量、属性、函数等就会在编译后的JavaScript代码中生成实际的代码。

  1. 模块模式和脚本模式下使用declare声明和不使用declare声明有什么区别?

在模块模式下,如果一个模块导出了一个类型,那么其他模块就可以直接使用这个类型。在这种情况下,如果你没有使用declare关键字,那么你定义的变量、属性、函数等就会被导出为实际的代码,可以被其他模块直接使用。

在脚本模式下,TypeScript编译器会把所有声明的变量、属性、函数等都看作是全局的,因此它们可以在脚本中的任何地方被访问。在这种情况下,如果你没有使用declare关键字,那么你定义的变量、属性、函数等就会被视为全局的变量、属性、函数等。

  1. 书中提到“每个根几倍的声明都必须以declare关键字作为前缀”,这个说法有问题吗?

这个说法是有问题的。在TypeScript中,只有当一个声明与一个现有的JavaScript文件一起使用时,才需要使用declare关键字。如果一个声明是在一个新的.ts.d.ts文件中定义的,那么就不需要使用declare关键字。

 类似资料:
  • 在TypeScript中,当创建.d.ts源代码声明文件时,哪个更可取,为什么? 或 我能说出的区别是接口不能有静态方法,所以你必须为此使用一个类。两者都不产生任何JS输出,所以也许没关系?

  • 主要内容:CalcThirdPartyJsLib.js 文件代码:,Calc.d.ts 文件代码:,CalcTest.ts 文件代码:,CalcTest.js 文件代码:,实例TypeScript 作为 JavaScript 的超集,在开发过程中不可避免要引用其他第三方的 JavaScript 的库。虽然通过直接引用可以调用库的类和方法,但是却无法使用TypeScript 诸如类型检查等特性功能。为了解决这个问题,需要将这些库里的函数和方法体去掉后只保留导出类型声明,而产生了一个描述 JavaS

  • %1有编译器错误,而%2是合法的。 为什么变量声明的类型必须与我们传递给对象类型的类型匹配(不允许派生类型)?我使用的数组如下所示,这是完全正确的: 有人能告诉我为什么集合必须声明为条件2吗?谢谢

  • 我决定将整个项目中需要的所有类型声明为一个文件。 所有类型。d、 输电系统 只要声明该名称空间,我就可以在我的所有项目文件中使用: 到目前为止,这一直有效。 但现在我需要声明一个基于现有JS对象的新类型。 @常数/集合。输电系统 因此,我必须在我的所有类型中执行以下操作。d、 ts文件。 所有类型。d、 输电系统 问题是,只要在我的所有ypes.d.ts的顶层执行,我的命名空间对我的项目文件不再可

  • 问题内容: 我对这两个词感到非常困惑。我检查了stackoverflow,对于C ++有一个类似的问题,但对于Java没有。 有人可以解释一下Java的两个术语之间的区别吗? 问题答案: 概念上的区别很简单: 声明 :您 声明的 是某些东西,例如类,函数或变量。你不说任何事情 什么 是类或函数的样子,你刚才说,它的存在。 定义 :您 定义 某种事物的实现方式,例如类,函数或变量,即您说的 是 实际

  • typescript 中为什么推荐使用 unknown 代替 any 声明? unknown 和 any 各自的作用