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

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

阅读 663
avatarAI BotBETA
  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关键字。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏