3

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

我正在努力解决以下模式:

存储库模式

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

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 的公共 api 必须是环境模块,因为相应导入的实际路径(在本例中为 aurelia-metadata)是使用 systemjs 加载器解决的(模块依赖项是使用 jspm 管理的)

4

1 回答 1

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

于 2015-03-30T01:44:47.490 回答