溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何導入TypeScript模塊

發布時間:2021-05-10 16:52:15 來源:億速云 閱讀:311 作者:Leah 欄目:web開發

如何導入TypeScript模塊?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

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 模塊相同,這會導致一些問題:

  • 如前文所提到的,當導入一個 CommonJs/AMD/UMD 模塊時,TypeScript 視 import * as koa from 'koa' 與 const koa = require('koa') 等價,但使用 import * as 創建的模塊對象實際上不可被調用以及被實例化。

  • 類似的,當導入一個 CommonJs/AMD/UMD 模塊時,TypeScript 視 import foo from 'foo' 與 const koa = require('koa').default 等價,但在大部分 CommonJs/AMD/UMD 模塊里,它們并沒有默認導出。

在 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')

它所做的事情只有兩個:

  • 導入模塊的所有類型信息;

  • 確定運行時的依賴關系。

當你加載此模塊,但并沒有使用,或僅當作類型來使用時,編譯后,此模塊將會被移除。

當不使用時;

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 選項時產生的方法。

關于如何導入TypeScript模塊問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女