需要有关创建打字稿公共类型定义的策略的指导

时间:2015-03-28 13:39:51

标签: typescript aurelia

我正在寻求为aurelia框架创建公共类型定义的指导 - aurelia on github here / aurelia website here / aurelia typescript samples on github

我正在努力解决以下问题:

repository pattern

typescript编译器不允许在通过相对外部模块名称引用外部模块的环境外部模块声明中导出声明

repos使用systemjs和jspm来解析aurelia-metadata。我想使用环境模块声明来公开aurelia-metadata

中的类型

我想要实现的目标实际上与将origin.d.ts,resource-type.d.ts和metadata.d.ts的内容复制到aurelia.d.ts中的环境模块声明中相同。

请注意./metadata/index.js基本上通过其导出发布公共接口,这正是我想在环境模块声明中公开的内容

我可以投降并手动将信息从编译器生成的origin.d.ts,resource-type.d.ts和metadata.d.ts复制到环境模块声明中,但一直试图找到一种方法只是公开在index.d.ts中导出的​​内容,因为这是repo中模块的公共api。

手动方法的问题是已经有20多个库,它们将继续增长,如果使用编译器无法更新api,我将永远跟踪repos和更新中的更改api手动。

我相信每个repo的public api必须是一个环境模块,因为使用systemjs loader解析相应导入的实际路径(在这种情况下是aurelia-metadata)(模块依赖关系是使用jspm管理的)

1 个答案:

答案 0 :(得分:2)

假设你有origin.d.ts

declare module 'aurelia/origin' {
    export class Origin {
    }
}

您可以将其导出/重新导出为aurelia.d.ts

/// <reference path="./origin/origin.d.ts"/>
declare module 'aurelia' {
    export * from 'aurelia/origin';
}

从使用情况验证:

/// <reference path="./aurelia"/>

import {Origin as Origin1} from "aurelia/origin";
import {Origin as Origin2} from "aurelia";

注意:完全答案取决于您希望如何使用Typescript中的定义。

在这里跟踪:https://github.com/Microsoft/TypeScript/issues/2516#issuecomment-87509666

相关问题