ts declare 的用法、和export的区别、*.d.ts的使用说明

一、declare:

阮一峰

首先声明,declare 来声明全局变量或类型的目的是为了让 TypeScript编译器能够识别和理解这些外部环境中已存在的内容,而不需要在当前文件中提供具体的实现或定义。包括 declare namespace 和declare moudle 也是为了上述。

二、 *.d.ts

三、declare 不规范 使用方式:(一开始我认为这种方式更好,比模块化好。)

*.d.ts文件 的 使用说明

  1. 全局类声明文件:如果一个声明文件的顶层作用域中没有 import && export,那么这个声明文件就是一个全局类声明文件。

特点:如果一个全局类声明文件在 ts 处理范围内, 那么全局类声明文件中的 declare 会在全局生效

  1. 若使用了 declare namespace NameSpace01的方式,则可以通过命名空间的方式,解决命名冲突。且在其他文件使用NameSpace01时不用import引入。如下:

*.d.ts里定义

复制代码
// 使用declare namespace 变成API1内局部的。
declare namespace API1 {
  interface stu {
    name: string;
  }
}
// 全局的
interface stu {
  name: string;
}

其他文件使用.这样就不用import了!

复制代码
const student1: API1.stu = { name: 'LiHua' }
const student2: stu = { name: 'LiHua' }
  1. *.d.ts中 直接写 type 、interface 加上 declare 和 不加 declare是一样的效果。都能在其他ts文件 直接引用

  2. *.d.ts中 namespace定义时,必须加上:declare ,否则报错:*.d.ts 文件中的顶级声明必须以 "declare" 或 "export" 修饰符开头

  3. declare: declare 关键字除了可以声明全局类型之外,它还可以用来声明全局函数、全局类或全局枚举类型等。工作中你可能已经用过的 eval、isNaN、encodeURI 和 parseInt 等函数也是在 lib.es5.d.ts 声明文件中声明的。

    // typescript/lib/lib.es5.d.ts
    declare var JSON: JSON;
    declare var Math: Math;
    declare var Object: ObjectConstructor;

四、为什么更推荐模块化?而不是 namespace 来解决命名冲突的问题。

这个要涉及:命名空间在编译后 跟 模块化编译后的区别是什么?



相关推荐
快乐非自愿18 小时前
Java垃圾收集器全解:从Serial到G1的进化之旅
java·开发语言·python
树在风中摇曳18 小时前
Java 静态成员与继承封装实战:从报错到彻底吃透核心特性
java·开发语言
Timememory82918 小时前
配置DNS主从服务
运维·服务器
时光不去19 小时前
java接口自动化之allure本地生成报告
运维·笔记·自动化
z2023050820 小时前
Linux之vmlinux文件段布局和arm64 的链接脚本vmlinux.lds.S分析
linux·运维·服务器
芳草萋萋鹦鹉洲哦20 小时前
【Windows】tauri+rust运行打包工具链安装
开发语言·windows·rust
权泽谦20 小时前
R Shiny 交互式网页实战:从零到上线可视化应用
开发语言·信息可视化·r语言
wuk99821 小时前
实现ROS系统的Websocket传输,向Web应用推送sensor_msgs::Image数据
前端·websocket·网络协议
hweiyu0021 小时前
Go Fiber 简介
开发语言·后端·golang
合作小小程序员小小店1 天前
web网页开发,在线%考试管理%系统,基于Idea,vscode,html,css,vue,java,maven,springboot,mysql
java·前端·系统架构·vue·intellij-idea·springboot