打字稿创建模块

打字稿创建模块

问题描述:

我想我们的库中创建模块,所以每次我们打电话的时候,我们可以用import {Api, Map} from "ourlibrary"打字稿创建模块

我目前使用以下。

import {Api} from "../../Library/Api"; 
import {MapPage} from "../map/map"; 

如何创建我自己的软件包以获得以下结果?

import {Api, Map} from "OurLib" 

我看到两个步骤来做到这一点:

  • 创建您SystemJS配置的map块的条目:

    System.config({ 
        map: { 
        'OurLib': 'path-to-ourlib' 
        }, 
        packages: { 
        'OurLib': { 
         main: 'index.js', 
         defaultExtension: 'js' 
        } 
        } 
    }); 
    
  • 创建打字稿文件(例如, index.ts)作为入口点模块,用于导入/导出要在库外提供的内容:

    export {Api} from "../../Library/Api"; 
    export {MapPage} from "../map/map"; 
    
+0

我正在使用离子,其中有tscnofig.json ...我如何使用tsconfig上的设置? http://pastie.org/10752352 - 它也有webdev ..有点不确定这是否发生在webdev或tsconfig – Basit

+0

你的意思是你想为你的lib定义一个契约,即ourlib.d.ts? –

创建一个顶级ES6风格的js文件的导出导入为单个文件并将其命名为OurLib

exports.Api = require('../../Library/Api').Api; 
exports.Map = require('.../map/map').Map; 

该方法的好处是它不会将您与单个模块加载器系统绑定。由于它是直接的ES6功能(需要/出口),它可以通过SystemJS,的WebPack,消耗打字稿等

如在下面的评论在需要声明的末尾提到,之所以.Api.Map是因为你通常从文件中导入的是类。你会在

export class Api {} 

export class Map {} 

在每个相应的文件的情况下使用的语法是这样的。这样你只分配你想要导出的类而不是整个需要的文件。它使您可以更好地控制捆绑的,公开的模块。

+0

为什么在行尾使用'.Api'&'.map'? –

+1

您通常会引用该导入文件中的特定类。 –

+0

你的意思是'.API和.map'是导出类的名字? –