---
# System prepended metadata

title: '#5 宣告檔案'
tags: [TypeScript 新手指南]

---

---
tags: TypeScript 新手指南
---

# #5 宣告檔案

> 討論日期: 2021/12/07
> 討論範圍: 宣告檔案


## 筆記分享

https://dazedbear.notion.site/TypeScript-5-41a147795d1646a784a157c4237926ae


## 待解決問題

> 這次內容有點複雜，需要再多讀一下..


### ES6 Module 一定要搭配 npm 使用嗎?

不一定，npm 只是個套件管理工具，如果你要在 client side 純 HTML 上使用 ES6 module 語法也是可以的。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules#applying_the_module_to_your_html

```htmlembedded=
<!-- 載入另一隻 JS 作為 module，那隻 JS 裡面可以使用 import/export 語法 -->
<script type="module" src="main.js"></script>


<!-- 直接將這段 code 定義成 module，不能使用 import/export 語法 -->
<script type="module">
  /* JavaScript module code here */
</script>
```



## 線上討論紀錄

### JavaScript 模組進化論 - 模組化的演進與實戰

> 認識各種 module 定義格式後，再看 [宣告檔案的各種撰寫情境](https://willh.gitbook.io/typescript-tutorial/basics/declaration-files#zhuan-xie-xuan-gao-dang-an) 會比較有脈絡

https://hackmd.io/@JSDC-tw/2021conference/%2FWkLLTE_ARW-D5kEq98KJ3g

```
IIFE
|
|
CommonJS
| - server side only (Node.js)
|
AMD
| - client side only (Browser)
| - 需要使用 RequireJS Loader 輔助
|   https://requirejs.org/docs/start.html
|
UMD
| - for both server and client side
| - 最外層是 IIFE，判斷並根據不同模組系統進行不同的動作
|
ESM
|
| - native support for both server and client side
| - Node.js 預設使用 CommonJS，想要用 ESM Node.js v13 以上版本可以透過以下方式使用
|   https://nodejs.org/api/esm.html#enabling
|   https://awdr74100.github.io/2020-02-16-nodejs-enableesm/
```


- 透過 <script> 引入
    - 全域變數：定義新的型別
    - 全域變數：擴充現有 module 的型別
    - UMD：定義新的型別
    - 外掛模組：匯入後改變另一個模組的結構
- module
    - ESM (npm)：定義新的型別
    - UMD：定義新的型別
    - npm/UMD：擴充現有 module 的型別
    - 外掛模組：匯入後改變另一個模組的結構