《八》TypeScript 中的模块化

文章讲述了TypeScript如何支持模块化,主要关注ESModule和之前的命名空间。ESModule是官方推荐的模块系统,提供独立作用域避免命名冲突。TypeScript还支持导出和导入类型,这对于类型检查至关重要,尽管在编译后会被移除。在导入类型时,使用`type`前缀是最佳实践。
摘要由CSDN通过智能技术生成

TypeScript 支持很多模块化的方案,但最主要的是 ES Module。

JavaScript 规范声明任何没有 export 的 JavaScript 文件都应该被认为是一个脚本,而非一个模块,在一个脚本文件中,变量会被声明在共享的全局作用域中。而模块是有独立作用域的,可以通过添加 export {] 来将其变为一个模块。

在 ES Module 之前,TypeScript 支持命名空间,使用 namespace 命名空间名称 {} 来创建,使其有独立的作用域。目前,命名空间虽然没有被废弃掉,但官方更推荐使用 ES Module,所以最好不要再使用了。

// index.ts 脚本文件
// 直接在一个脚本文件中定义相同的变量,出现了命名冲突
function format() {}
function format() {}
// index.ts 脚本文件
// 使用命名空间,有了独立的作用域,不会再命名冲突了
namespace price {
  function format() {}
}
namespace date {
 function format() {}
}

类型导出和导入:

除了支持 JavaScript 中 ES Module 的功能外,TypeScript 还支持类型的导出和导入。

其中,导入类型时最好添加 type 前缀来表明导入的是一个类型,因为 TypeScript 的类型只是在编写代码的过程中提供类型检测,在编译后都会被移除的,这可以让非 TypeScript 的编译器(例如:Babel)知道什么样的导入可以被安全移除。

// type.ts
// 导出类型
export interface IPerson {
  name: string,
  age: number,
}
export type IDType = number | string
// index.ts
// 导入类型
import {type IPerson. type IDType} from "./type"
// 也可以使用这种方式:
import type {IPerson, IDType } from "./type"

// 使用类型
let p: IPerson = {
  name: 'Lee',
  age: 18,
}
let id: IDType = 1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值