Day24 Modules & Namespaces

今天要来介绍 Module,写 Module 的好处在於,可以把程序码分成不同档案来管理,会比较好维护,也能比较好阅读。
要把程序码写成模组有两种做法,一种是 Namespaces,一种是 ES6 的 imports/exports,今天先介绍 Namespaces,用前几天做的小专案来做练习。

把 interface 放在 namespace 里面,然後用 export 关键字把它们 export 出去这样不只在 namespace 里面可以使用,其他档案也能够使用。回到 app.ts 档案,要怎麽使用它们呢?
https://ithelp.ithome.com.tw/upload/images/20211009/20131989pQpH1g3sZ5.png

在 app.ts 里面加上 TS 的特殊语法:

/// <reference path="drag-drop-interfaces.ts" />

然後在 app.ts 里面设立一个跟拉出去的 interfaces 一样名称的 namespace,然後把所有的程序码都放在里面。
https://ithelp.ithome.com.tw/upload/images/20211009/20131989T2W14zr9wF.png

这时候会遇到一个问题,编译的时候没有错误,看似一切正常,可是当在浏览器要新增专案时却跑出一个 Uncaught TypeError,这是为甚麽呢?
https://ithelp.ithome.com.tw/upload/images/20211009/201319898lzC5R33Ji.png

因为 namespace 是 TypeScript 的功能,JavaScript 并不认识这个功能,所以在编译的时候不会有错是正常的,但是在编译的过程,TypeScript 把它们编译成不同的 .js 档了,也就是说,分割出去的各个 namespace 的程序码跟 app.ts 之间的连结,在编译成 JavaScript 的档案之後就消失无踪了。
https://ithelp.ithome.com.tw/upload/images/20211009/20131989fnCl9j7Vcn.png

解决这个问题的方法是设定 tsconfig.json 档:

"outFile": "./dist/bundle.js"

但是这样又会跑出一个问题,
https://ithelp.ithome.com.tw/upload/images/20211009/20131989nIcyktPS70.png
但是这边先不深究 amdsystem module 是什麽,把 tsconfig.json 的模组改成:

"module": "amd"

这时再编译一次的话就会看到所有的 .js 档变成一个 bundle.js 的档案了。
https://ithelp.ithome.com.tw/upload/images/20211009/20131989zYLNq6Fzh8.png

这样一来,我们的 drag & drop 专案就可以正常使用罗!

今天的 namespace 就暂且介绍到这边,这样可以把相同功能的程序码移到不同的 .ts 档,的确是在管理上方便了许多,之後会再介绍 ES module,谢谢阅读。:)


<<:  【Day 3_ 关於Arm与袋狼的那些事】

>>:  [day24]Vue实作-交易建立页面_完成版

[DAY 04] EC2 Security Group

Security Group 安全群组 Security group 是 AWS 网路安全的基础,它...

Day07:资料结构 - 杂凑表(Hash Table)

杂凑表,我需要那个酷东西 在线性资料结构中,若要找一个资料,花费的时间复杂度为O(n),或是可以选择...

[Day19] - Django-REST-Framework Viewsets 介绍

在第一个 API 中我们编写的 View,不知道大家有没有觉得非常简洁呢,好像没有写什麽代码,但是就...

【左京淳的JAVA学习笔记】第七章 API

API(application program interface)是指程序之间具有特定规范的接口。...

从 JavaScript 角度学 Python(7) - 条件与回圈

前言 接下来是聊条件与回圈的部分,毕竟写程序这两个东西非常常使用到。 条件控制 条件控制的语法又可以...