<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        關于TypeScript模塊導入的那些事

        來源:懂視網 責編:小采 時間:2020-11-27 22:13:04
        文檔

        關于TypeScript模塊導入的那些事

        關于TypeScript模塊導入的那些事:前言 模塊在其自身的作用域里執行,而不是在全局作用域里;這意味著定義在一個模塊里的變量,函數,類等等在模塊外部是不可見的,除非你明確地使用export之一導出它們。 相反,如果想使用其它模塊導出的變量,函數,類,接口等的時候,你必須要導入它們,可以
        推薦度:
        導讀關于TypeScript模塊導入的那些事:前言 模塊在其自身的作用域里執行,而不是在全局作用域里;這意味著定義在一個模塊里的變量,函數,類等等在模塊外部是不可見的,除非你明確地使用export之一導出它們。 相反,如果想使用其它模塊導出的變量,函數,類,接口等的時候,你必須要導入它們,可以

        前言

        模塊在其自身的作用域里執行,而不是在全局作用域里;這意味著定義在一個模塊里的變量,函數,類等等在模塊外部是不可見的,除非你明確地使用export之一導出它們。 相反,如果想使用其它模塊導出的變量,函數,類,接口等的時候,你必須要導入它們,可以使用import之一。

        模塊是自聲明的。在TypeScript里,兩個模塊之間的關系是通過在文件級別上使用import和export建立的。

        下面話不多說了,來一起看看詳細的介紹吧

        ES6 模塊導入的限制

        我們先來看一個具體的例子:

        在 Node 項目里,使用 CommonJS 規范引入一個模塊:

        const koa = require('koa')

        改寫為 TypeScript(1.5+ 版本)時,通常有兩種方式:

        使用 ES6 模塊導入方式:

        // allowSyntheticDefaultImports: false
        import * as koa from 'koa'

        使用 TypeScript 模塊導入語法:

        import koa = require('koa')

        兩者大部分是等價的,但 ES6 規范對 import * as 創建出的模塊對象有一點限制。

        根據該規范,該模塊對象不可被調用,也不可被實例化,它只具有屬性。

        因此,如果你想調用該對象,或者使用 new 方法,在 allowSyntheticDefaultImports: false 的配置下,應該使用例子中的第二種方式。

        2.7 版本對 CommonJs/AMD/UMD 模塊導入的增強

        在之前的版本,TypeScript 對 CommonJs/AMD/UMD 模塊的處理方式與 ES6 模塊相同,這會導致一些問題:

      1. 如前文所提到的,當導入一個 CommonJs/AMD/UMD 模塊時,TypeScript 視 import * as koa from 'koa' 與 const koa = require('koa') 等價,但使用 import * as 創建的模塊對象實際上不可被調用以及被實例化。
      2. 類似的,當導入一個 CommonJs/AMD/UMD 模塊時,TypeScript 視 import foo from 'foo' 與 const koa = require('koa').default 等價,但在大部分 CommonJs/AMD/UMD 模塊里,它們并沒有默認導出。
      3. 在 2.7 的版本里,TypeScript 提供了一個新選項 --esModuleInterop,旨在解決上述問題,
        當使用該選項,且模塊為 CommonJs/AMD/UMD 時,它會導入一個可調用或是可實例化的模塊,同時它規定該模塊必須作為默認導入:

        import koa from 'koa'
        const app = new koa()

        模塊導入僅僅是一些聲明類型

        在以非相對路徑導入一個模塊時,你可能會看到 Could not find a declaration file for module 'someModule' 的錯誤, 此時你可以安裝對應模塊的聲明文件或者寫一個包含 declare module 'someModule' 的聲明文件。
        實際上,當我們導入一個模塊時:

        import koa from 'koa'
        // import koa = require('koa')

        它所做的事情只有兩個:

      4. 導入模塊的所有類型信息;
      5. 確定運行時的依賴關系。
      6. 當你加載此模塊,但并沒有使用,或僅當作類型來使用時,編譯后,此模塊將會被移除。

        當不使用時;

        import koa from 'koa'

        編譯后:

        僅當做類型使用時:

        import koa from 'koa'
        let k: koa

        編譯后:

        var k

        做為值使用時,編譯后,此模塊將會被保留:

        import koa from 'koa'
        const app = new koa()

        編譯后(假設使用 commonjs):

        var __importDefault = (this && this.__importDefault) || function (mod) {
         return (mod && mod.__esModule) ? mod : { "default": mod };
        };
        var koa_1 = __importDefault(require("koa"));
        var k = new koa_1.default();

        注: __importDefault 為使用 --esModuleInterop 選項時產生的方法。

        參考

        http://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html
        https://stackoverflow.com/questions/35706164/typescript-import-as-vs-import-require?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
        https://basarat.gitbooks.io/typescript/content/docs/project/external-modules.html

        總結

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        關于TypeScript模塊導入的那些事

        關于TypeScript模塊導入的那些事:前言 模塊在其自身的作用域里執行,而不是在全局作用域里;這意味著定義在一個模塊里的變量,函數,類等等在模塊外部是不可見的,除非你明確地使用export之一導出它們。 相反,如果想使用其它模塊導出的變量,函數,類,接口等的時候,你必須要導入它們,可以
        推薦度:
        標簽: 導入 模塊 導入的
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 日本久久久久亚洲中字幕| 亚洲国产av美女网站| 亚洲另类春色校园小说| 亚洲国产综合AV在线观看| 国产免费播放一区二区| 999国内精品永久免费观看| 免费v片在线观看无遮挡| 亚洲AV成人片色在线观看高潮| 亚洲人成电影网站色| 国产午夜成人免费看片无遮挡 | 久久免费精彩视频| 免费看美女让人桶尿口| 国产精品亚洲片在线观看不卡| 亚洲AV男人的天堂在线观看| 三上悠亚电影全集免费| 妞干网免费视频观看| 亚洲国产精品无码久久久秋霞2| 亚洲国产欧美国产综合一区 | 国产亚洲精品资在线| 国产亚洲精品VA片在线播放| 巨胸喷奶水视频www免费视频| 麻豆国产人免费人成免费视频| 亚洲AV无码AV男人的天堂| 亚洲av综合日韩| 黄+色+性+人免费| 亚洲真人无码永久在线| 亚洲国产精品久久久久秋霞小| 免费A级毛片av无码| 亚洲国产精品日韩| 国产亚洲玖玖玖在线观看| 一级毛片在线免费看| 亚洲一级特黄大片在线观看| 亚洲日本VA中文字幕久久道具| 免费国产黄网站在线观看可以下载 | 天天摸夜夜摸成人免费视频| 久久久无码精品亚洲日韩蜜桃 | 日韩视频在线免费| 亚洲成a人片在线网站| 四虎国产精品免费永久在线| 国产黄色片在线免费观看| 亚洲国产日韩在线人成下载|