欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何在TypeScript使用模塊化以及注意事項詳解

 更新時間:2022年10月16日 09:31:24   作者:前端刺不刺客  
在TypeScript中就像在EC5中一樣,任何包含頂級import或export的文件都被認為是一個模塊,下面這篇文章主要給大家介紹了關于如何在TypeScript使用模塊化以及注意事項的相關資料,需要的朋友可以參考下

前言

隨著我們的代碼越來越龐大,我們需要拆分模塊組合, 便于后續(xù)的維護

除了commonJS, es6. ts也是支持模塊化的!???

如何在TS中寫es6模塊化語句

自從發(fā)布ES6(ES2015)之后, ts就采用了es6的模塊化標準-導出和導入模塊??

  • 寫法:

導出:

myModule.ts
    export const name: number = 123
    export const getUser = (user: string): void => {
      console.log(user)
    }

導入:

index.ts
    import { name, getUser } from "./myModule";
    getUser(name)
  • 值得注意的是TS的智能提示發(fā)揮到了超乎想象??

沒有引入直接使用變量, 波浪線智能提示從哪里引入

直接書寫變量,enter直接帶出引入

??雖智能, 但還是要注意幾點

注意事項詳細
獲取智能提示有條件但是要注意的是: 這個提示只適用于export, 不適用于export default。因為export有固定的變量名,而export default導出沒有名字和引入時隨意起名字, TS不會去猜測
import引入的文件名import引入的文件名不能帶上.ts, 因為會參與編譯的過程, 編譯后的結果為js,找不到ts這個文件

如何在TS中寫commonjs模塊化語句

按我們之前的寫法,是這樣子寫的

// 導出
module.exports = {
    sum (a: number, b: numnber) {
        return a + b
    }
}

//引入
const mymodule = require('./xxx')

此時會發(fā)現mymodule的類型為any,沒有類型檢查了

  • ts中這樣才能有完整的類型檢查, 并且和上述寫法的編譯結果一樣
// 導出
exports = {
    sum (a: number, b: numnber) {
        return a + b
    }
}

//引入
import mymodule = require('./xxx')

會發(fā)現寫法還是有差異的,

所以建議還是使用es6的標準會比較好,因為ta是后面的標準

解決導入錯誤的情況

先看一個例子,我們在代碼里引入node中的fs模塊

ts文件中:

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

編譯結果:

    // tsconfig.json中設置module: CommonJs, 結果如下

    exports.__esModule = true;
    var fs_1 = require("fs");
    fs_1["default"].readFileSync('./');

??此時會發(fā)現一些問題

  • 1.在ts文件中書寫會報錯
  • 2.編譯結果中, 使用了default屬性.readFileSync

編譯后的fs沒有default屬性, 所以報錯了

為什么會報錯呢

 import fs from "fs";

fs不是標準esmodule標準導出 因為fs默認使用module.exports={}的形式導出, import直接引入, 編譯結果會帶上default, fs中沒有default屬性

解決方案

  • ??1.解構出方法使用, 這樣就不會使用default屬性

ts文件中:

    import { readFileSync } from "fs";
    readFileSync('./')

編譯結果:

    exports.__esModule = true;
    var fs_1 = require("fs");
    (0, fs_1.readFileSync)('./');
  • ??2.使用* as fs全部導入, 將module.exports內全部導入

ts文件中:

    import * as fs from "fs";
    fs.readFileSync('./')

編譯結果:

    exports.__esModule = true;
    var fs = require("fs");
    fs.readFileSync('./');
  • ??3.設置esModuleInteroptrue, 讓TS識別出是否導出esmudole標準形式,并作出相應的處理
tsconfig.json

{
  "compilerOptions": { 
    // 啟用es模塊化交互而非es模塊導出
    "esModuleInterop": true
  }
}

ts文件中:

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

編譯結果:

// 生成輔助函數__importDefault
// 此時如果不是屬于esmodule形式導出, ts會默認添加default屬性,值設置為本身
    var __importDefault = (this && this.__importDefault) || function (mod) {
        return (mod && mod.__esModule) ? mod : { "default": mod };
    };
    exports.__esModule = true;
    var fs_1 = __importDefault(require("fs"));
    fs_1["default"].readFileSync('./');

補充:TypeScript命名空間

TypeScript有自己的模塊格式,稱為 命名空間(namespaces) ,這比ES模塊標準要早

這種語法對于創(chuàng)建復雜的定義文件有很多有用的功能,并且在DefinitelyTyped中仍然被積極使用。雖然沒有被廢棄,但命名空間中的大部分功能都存在于ES Modules中,官方建議使用它來與JavaScript的方向保持一致

總結

到此這篇關于如何在TypeScript使用模塊化以及注意事項的文章就介紹到這了,更多相關TypeScript使用模塊化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用 JavaScript 進行函數式編程 (一) 翻譯

    使用 JavaScript 進行函數式編程 (一) 翻譯

    本文是函數式編程系列的第一篇文章。這里我會簡要介紹一下編程范式,然后會直接介紹使用 Javascript 進行函數式編程的概念,因為 JavsScript 是最被認可的函數式程序語言之一。我們鼓勵讀者通過參考資料部分進一步了解這一迷人的概念
    2015-10-10
  • JS實現滑動門效果的方法詳解

    JS實現滑動門效果的方法詳解

    這篇文章主要介紹了JS實現滑動門效果的方法,結合實例形式分析了滑動門效果的實現原理、步驟與相關注意事項,需要的朋友可以參考下
    2016-12-12
  • 基于JavaScript實現評論框展開和隱藏功能

    基于JavaScript實現評論框展開和隱藏功能

    本文通過實例代碼給大家介紹了基于JavaScript實現評論框展開和隱藏功能,感興趣的朋友參考下吧
    2017-08-08
  • javascript中如何將字符串轉換成數字

    javascript中如何將字符串轉換成數字

    這篇文章主要介紹了javascript中如何將字符串轉換成數字問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • js實現用戶輸入的小寫字母自動轉大寫字母的方法

    js實現用戶輸入的小寫字母自動轉大寫字母的方法

    下面小編就為大家?guī)硪黄猨s實現用戶輸入的小寫字母自動轉大寫字母的方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • JS實現轉動隨機數抽獎特效代碼

    JS實現轉動隨機數抽獎特效代碼

    這篇文章主要為大家詳細介紹了一款轉動隨機數抽獎的JS特效代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-08-08
  • 微信小程序 css使用技巧總結

    微信小程序 css使用技巧總結

    這篇文章主要介紹了微信小程序 css使用技巧總結的相關資料,需要的朋友可以參考下
    2017-01-01
  • uniapp制作一個收縮通訊錄的實現代碼

    uniapp制作一個收縮通訊錄的實現代碼

    這篇文章主要介紹了uniapp制作一個收縮通訊錄的實現代碼,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-12-12
  • 微信小程序移動拖拽視圖-movable-view實例詳解

    微信小程序移動拖拽視圖-movable-view實例詳解

    這篇文章主要介紹了微信小程序移動拖拽視圖-movable-view的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • 淺談js中test()函數在正則中的使用

    淺談js中test()函數在正則中的使用

    下面小編就為大家?guī)硪黄獪\談js中test()函數在正則中的使用。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08

最新評論