最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

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

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

  • 寫法:

導(dǎo)出:

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

導(dǎo)入:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

解決導(dǎo)入錯誤的情況

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

ts文件中:

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

編譯結(jié)果:

    // tsconfig.json中設(shè)置module: CommonJs, 結(jié)果如下

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

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

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

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

為什么會報錯呢

 import fs from "fs";

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

解決方案

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

ts文件中:

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

編譯結(jié)果:

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

ts文件中:

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

編譯結(jié)果:

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

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

ts文件中:

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

編譯結(jié)果:

// 生成輔助函數(shù)__importDefault
// 此時如果不是屬于esmodule形式導(dǎo)出, ts會默認添加default屬性,值設(shè)置為本身
    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)建復(fù)雜的定義文件有很多有用的功能,并且在DefinitelyTyped中仍然被積極使用。雖然沒有被廢棄,但命名空間中的大部分功能都存在于ES Modules中,官方建議使用它來與JavaScript的方向保持一致

總結(jié)

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

相關(guān)文章

  • JavaScript使用高階生成器進行過濾以生成素數(shù)

    JavaScript使用高階生成器進行過濾以生成素數(shù)

    生成器大家都知道是怎么一回事,但是高階生成器又是什么東西呢,下面小編就來為大家簡單介紹一下如何使用高階生成器進行過濾以生成素數(shù)吧
    2024-02-02
  • 原生JavaScript之es6中Class的用法分析

    原生JavaScript之es6中Class的用法分析

    這篇文章主要介紹了原生JavaScript之es6中Class的用法,結(jié)合實例形式對比分析了es6與es5相關(guān)class定義、區(qū)別及使用技巧,需要的朋友可以參考下
    2020-02-02
  • jQuery實現(xiàn)隨意改變div任意屬性的名稱和值(部分原生js實現(xiàn))

    jQuery實現(xiàn)隨意改變div任意屬性的名稱和值(部分原生js實現(xiàn))

    用原生js和jQuery實現(xiàn)隨意改變div屬性和重置,在輸入框輸入“屬性名”及“屬性值”,點擊確定按鈕查看效果,感興趣的你可不要錯過了哈
    2013-05-05
  • Bootstrap中的Panel和Table全面解析

    Bootstrap中的Panel和Table全面解析

    這篇文章主要介紹了Bootstrap中的Panel和Table全面解析的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • javascipt:filter過濾介紹及使用

    javascipt:filter過濾介紹及使用

    filter是new一個新的array,這篇文章主要介紹了javascipt filter過濾介紹及使用,需要的朋友可以參考下
    2014-09-09
  • 原生JS實現(xiàn)鼠標滑動撒愛心特效

    原生JS實現(xiàn)鼠標滑動撒愛心特效

    這篇文章主要為大家詳細介紹了原生JS實現(xiàn)鼠標滑動撒愛心特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • JavaScript中的操作符==與===介紹

    JavaScript中的操作符==與===介紹

    這篇文章主要介紹了JavaScript中的操作符==與===介紹,本文講解了===操作符的判斷規(guī)則、==操作符的判斷規(guī)則,需要的朋友可以參考下
    2014-12-12
  • javascript 進度條的幾種方法

    javascript 進度條的幾種方法

    在實際項目中,進度條的用處還是非常大的。這篇文章主要是要介紹幾種制作進度條的方法。通過學(xué)習(xí),你也能制作屬于自己的進度條了。
    2009-05-05
  • js 控制圖片大小核心講解

    js 控制圖片大小核心講解

    控制圖片大小的方法有很多,在本文將為大家詳細介紹下使用js實現(xiàn)縮放圖片,核心代碼如下,感興趣的朋友可以參考下
    2013-10-10
  • JS中通過slice()&substring()截取字符串前幾位的方法

    JS中通過slice()&substring()截取字符串前幾位的方法

    在Javascript使用字符串中,我們不一定需要全部的字符串,這時就需要截取字符串,本文主要介紹js中截取字符串前幾位的兩種方法:1、使用slice() 方法;2、使用substring() 方法,本文通過示例代碼介紹的非常詳細,需要的朋友參考下吧
    2023-12-12

最新評論

柏乡县| 阿拉善盟| 阳新县| 丰台区| 丘北县| 商水县| 宁乡县| 衡东县| 江永县| 郸城县| 连云港市| 射阳县| 蕲春县| 南充市| 平南县| 新蔡县| 阿拉善盟| 收藏| 夏邑县| 当涂县| 邳州市| 南平市| 平陆县| 建水县| 财经| 绥阳县| 封丘县| 巴中市| 乳源| 伊春市| 顺昌县| 嵊州市| 比如县| 汶上县| 英德市| 瓮安县| 华安县| 新野县| 祁门县| 当阳市| 阳新县|