当前位置:   article > 正文

04-TypeScript学习之模块化_ts声明文件 module.exports

ts声明文件 module.exports

模块化

  • 前端领域中的模块化标准: 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();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
/*commonjs编译结果*/
/*导出*/
function default_1() {
    console.log("hello my Module");
}
exports.default = default_1;
/*导入*/
myModule_1.default();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

特殊情况(类似于fs

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

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

解决方法

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

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

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

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

  • 使用 exportimport
/*导出*/
export = {
    sex:'男',
    eat:function(food){
        console.log("I'm eating " + food)
    }
}
/*导入*/
import obj = require("./myModule")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

模块解析

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

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

classic: 经典

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/748296
推荐阅读
相关标签
  

闽ICP备14008679号