04-TypeScript学习之模块化

模块化

  • 前端领域中的模块化标准: ES6 commonjs amd umd system

研究问题

TS中如何书写模块化语句

编译结果使用的是什么模块化标准

TS中如何书写模块化语句

TS中 导入和导出模块 统一使用ES6的模块化标准

编译结果中的模块化

  • 可配置 tsConfig.json module属性

node 环境 - commonjs 转换成require引入 导出的声明会变成一个一个的属性

浏览器环境 - es2017 没有区别

  • 编译时使用commonjs export default会被编译成exports上的一个属性default
/*ts代码*/
/*导出*/
export default function sayHello(){
    console.log("hello my Module");
}
/*导入*/
import sayHello from "./myModule"
sayHello();
/*commonjs编译结果*/
/*导出*/
function default_1() {
    console.log("hello my Module");
}
exports.default = default_1;
/*导入*/
myModule_1.default();

特殊情况(类似于fs

import fs from "fs"
fs.readFileSync("./");

const fs_1 = require("fs");
fs_1.default.readFIleSync("./");
  • fs是node中的一个模块 使用module.exports = {}形式导出
  • 引入时使用的是默认引入 编译时 所有的函数调用前都会加上default 导致无法识别该函数

解决方法

  • 单个引入函数
import {readFileSync} from "fs"
readFileSync("./");
  • 全部引入 定义别名
import * as fs from "fs"
fs.readFileSync("./");
  • 添加配置 esModuleInterop
const fs = require("fs");
fs.readFileSync("./");

如何在TS中书写commonjs模块化代码

  • 原始的module.exportsrequire写法
/*导出*/
module.exports = {
    sex:'男',
    eat:function(food){
        console.log("I'm eating " + food)
    }
}
/*导入*/
let obj = require("./myModule");

此种写法可以正常运行 但是TS无法检测到类型 不推荐

  • 使用 exportimport
/*导出*/
export = {
    sex:'男',
    eat:function(food){
        console.log("I'm eating " + food)
    }
}
/*导入*/
import obj = require("./myModule")

模块解析

  • 模块解析:应该从什么位置寻找模块

  • TS中 有两种模块解析策略

classic: 经典

node: node 解析策略(唯一的变化是将js替换成ts)
https://www.cnblogs.com/winfred/p/8179815.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值