【问题标题】:Partial ambient internal module declarations in TypeScript?TypeScript 中的部分环境内部模块声明?
【发布时间】:2014-10-16 06:53:55
【问题描述】:

我在一个基于 D3 库的 TypeScript 项目中使用 Jason Davies 的 wordcloud。具体来说,它定义了一个新函数 cloud(),它被定义为从 D3.layout 扩展的成员,如 D3.layout.cloud() 中所示。要为 TypeScript 模块指定这个,我需要在环境模块声明中定义它,我们在 Boris Yankov 的最终列表 TypeScript declarations 中确实有它。

有没有办法创建一个部分模块声明 (.d.ts) 文件来扩展已经存在的声明?还是我必须编辑自己的标准声明文件 (d3.d.ts) 副本并在其中插入新成员?

PS 感谢 Davies 先生和 Yankov 先生的努力,以这种方式学习 TypeScript 更加有趣:)。

【问题讨论】:

  • 在 typescript 中作为 open end 的接口,所以是的,partials 是要走的路。查看 TrueBlueAussie 的回答

标签: javascript d3.js typescript


【解决方案1】:

只需添加一个新接口(它们都被视为部分并由 TypeScript 合并)。

例如为了扩展jQuery 的定义,我添加了一个这样的接口:

// Declare our additions to JQuery
interface JQuery
{
    isDescendentOf(element: any);
    attrString(): string;
    cssInt(any): number;
    cssFloat(any): number;
    reverse(): JQuery;

    // Compensate for missing (valid) trigger overload
    trigger(event: JQueryEventObject, ...extraParameters: any[]): JQuery;
}

为了扩展 String 我这样做了:

interface String
{
    startsWith(text: string): boolean;
}

为了扩展 Date 对象(以支持部分“mm/yy”日期),我这样做了:

// Extend the date class, so we can include the partial flag
interface Date
{
    isPartial: boolean;
    isValid: boolean;
    partialDate(): string;
}

【讨论】:

    猜你喜欢
    • 2012-10-12
    • 2015-08-11
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 2019-01-15
    • 2019-06-25
    • 1970-01-01
    • 2012-11-08
    相关资源
    最近更新 更多