如何導(dǎo)入TypeScript模塊?針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、甘南網(wǎng)站維護、網(wǎng)站推廣。ES6 模塊導(dǎo)入的限制
我們先來看一個具體的例子:
在 Node 項目里,使用 CommonJS 規(guī)范引入一個模塊:
const koa = require('koa')
改寫為 TypeScript(1.5+ 版本)時,通常有兩種方式:
使用 ES6 模塊導(dǎo)入方式:
// allowSyntheticDefaultImports: false import * as koa from 'koa'
使用 TypeScript 模塊導(dǎo)入語法:
import koa = require('koa')
兩者大部分是等價的,但 ES6 規(guī)范對 import * as 創(chuàng)建出的模塊對象有一點限制。
根據(jù)該規(guī)范,該模塊對象不可被調(diào)用,也不可被實例化,它只具有屬性。
因此,如果你想調(diào)用該對象,或者使用 new 方法,在 allowSyntheticDefaultImports: false 的配置下,應(yīng)該使用例子中的第二種方式。
2.7 版本對 CommonJs/AMD/UMD 模塊導(dǎo)入的增強
在之前的版本,TypeScript 對 CommonJs/AMD/UMD 模塊的處理方式與 ES6 模塊相同,這會導(dǎo)致一些問題:
如前文所提到的,當導(dǎo)入一個 CommonJs/AMD/UMD 模塊時,TypeScript 視 import * as koa from 'koa' 與 const koa = require('koa') 等價,但使用 import * as 創(chuàng)建的模塊對象實際上不可被調(diào)用以及被實例化。
類似的,當導(dǎo)入一個 CommonJs/AMD/UMD 模塊時,TypeScript 視 import foo from 'foo' 與 const koa = require('koa').default 等價,但在大部分 CommonJs/AMD/UMD 模塊里,它們并沒有默認導(dǎo)出。
在 2.7 的版本里,TypeScript 提供了一個新選項 --esModuleInterop,旨在解決上述問題,
當使用該選項,且模塊為 CommonJs/AMD/UMD 時,它會導(dǎo)入一個可調(diào)用或是可實例化的模塊,同時它規(guī)定該模塊必須作為默認導(dǎo)入:
import koa from 'koa' const app = new koa()
模塊導(dǎo)入僅僅是一些聲明類型
在以非相對路徑導(dǎo)入一個模塊時,你可能會看到 Could not find a declaration file for module 'someModule' 的錯誤, 此時你可以安裝對應(yīng)模塊的聲明文件或者寫一個包含 declare module 'someModule' 的聲明文件。
實際上,當我們導(dǎo)入一個模塊時:
import koa from 'koa' // import koa = require('koa')
它所做的事情只有兩個:
導(dǎo)入模塊的所有類型信息;
確定運行時的依賴關(guān)系。
當你加載此模塊,但并沒有使用,或僅當作類型來使用時,編譯后,此模塊將會被移除。
當不使用時;
import koa from 'koa'
編譯后:
僅當做類型使用時:
import koa from 'koa' let k: koa
編譯后:
var k
做為值使用時,編譯后,此模塊將會被保留:
import koa from 'koa' const app = new koa()
編譯后(假設(shè)使用 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 選項時產(chǎn)生的方法。
關(guān)于如何導(dǎo)入TypeScript模塊問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。