在模块中包装最终的Typsecript导出?

时间:2016-09-03 04:20:36

标签: javascript visual-studio typescript

我需要在TS模块中导出一堆模型和服务。

来源

模型/ User.ts

import {IModel} from "./IModel";

export interface User extends IModel {
    // ...
}

服务/ UserService.ts

import {inject} from 'aurelia-framework';
import {HttpClient} from 'aurelia-fetch-client';
import {BaseService} from "./BaseService";
import {User as ModelType} from "../models/User";

@inject(HttpClient)
export class UserService extends BaseService<ModelType> { 
    // ...
}

DIST

在构建项目之后,这就是我想要的结果。不一定是逐字逐句,但一般来说我希望我的根模块my-module包含models的子模块和services的子模块 - 或者允许我以这样的方式访问事物:模型/服务不捆绑在同一“容器”下(例如,以避免模型/服务之间的名称冲突)。

DIST / index.d.ts

declare module "my-module/models" {
    export interface User { ... }
    // ... other models here ...
}

declare module "my-module/services" {
    export class UserService { ... }
    // ... other models here ...
}

这样我就可以通过npm安装此软件包并在另一个项目中使用它:

import {User} from "my-module/models";
import {UserService} from "my-module/services";
  • 有很多模型/服务,所以我不想手动维护/构建index.ts来解决这些问题。
  • 我应该如何构建我的Typescript项目?

1 个答案:

答案 0 :(得分:1)

似乎typings bundle完全符合您的需要。它会将所有声明文件和依赖项合并到一个文件中。

让我们说例如。我有一个名为“stackoverflow”的模块,它有两个文件(stackoverflow.ts和constants.ts)。 index.ts取决于外部库(例如bluebird)和constants.ts。

<强> stackoverflow.ts

import { PromisifyOptions } from 'bluebird'
export { FIRST } from './constants'

export interface thePromiseUsingInterface {
  options: PromisifyOptions
}

<强> constants.ts

export const FIRST = 1
export const SECOND = 2

生成主声明文件:

  1. 生成您的声明文件:tsc --delcaration
  2. 将声明文件及其依赖项捆绑到index.d.ts中: typings bundle -o index.d.ts
  3. 当您将库发布到npm时,请确保还包括typings.json。

    在您的其他项目中,您可以npm install stackoverflow开始使用它:

    import * as constants from 'stackoverflow/constants'
    console.log(constants.SECOND)
    

    这里有一个gist with all the relevant files:stackoverflow.ts,constants.ts,index.d.ts,package.json,typings。