来自@types中声明的命名空间的typescript augument接口

时间:2018-04-11 16:46:51

标签: typescript namespaces

我正在尝试添加例如将响应属性转换为例如接口设置,例如node_modules/@types/datatables.net/index.d.ts:

declare namespace DataTables {
    ...
    interface Settings {
    ...

我的项目基于https://github.com/gdi2290/angular-starter,我希望将该属性与实现它的 datatables.net-responsive-bs4 一起使用。

问:如何编写添加响应属性的声明?

PS:我特别感兴趣的是学习如何将这种声明写入我的项目

1 个答案:

答案 0 :(得分:1)

增加模块和环境声明之间存在差异。在您的情况下,datatables.net的定义只需声明namespaceinterface。这意味着您可以在另一个d.ts文件中重新声明这些文件,它们将合并:

// datatables.d.ts
declare namespace DataTables {

    interface Settings {
        responsive : boolean
    }
}

// usage.ts
/// <reference path="./node_modules/@types/datatables.net/index.d.ts" />
/// <reference path="./datatables.d.ts" />

let settings : DataTables.Settings = {
    responsive: true, // ok, from us 
    autoWidth: true // from lib
}

对于模块扩充,您可以在模块扩充部分查看here

PS: tslint.json 应至少使用"allow-declarations"作为规则"no-namespace",否则IDE可能会通过使declare关键字无效来欺骗您(例如使用"no-namespace": [true, "allow-declarations"])。