typescript - 从包中修改命名空间

标签 typescript namespaces

我正在使用通过 @types 安装的类型 def我想修改。
Q有一个很软的.d.ts这不允许您指定传递给 reject 的参数的类型在 Deferred . Defferred的接口(interface)看起来像这样:

declare namespace Q {
    // ...
    export interface Deferred<T> {
        promise: Promise<T>;
        resolve(value?: IWhenable<T>): void;
        reject(reason: any): void;
        notify(value: any): void;
        makeNodeResolver(): (reason: any, value: T) => void;
    }
    // ...
}

使用普通接口(interface),您可以只创建具有匹配名称的接口(interface),例如 global.d.ts并且它们会自动合并,我无法让它与命名空间中的接口(interface)一起使用。

我想做的是在我的 global.d.ts 中放入这样的东西文件:
declare namespace Q {
    export interface Deferred<T, R, N> {
        reject(reason: R): void;
        notify(value: N): void;
    }

    export function defer<T, R, N>(): Deferred<T, R, N>;
}

并将该接口(interface)和功能合并回 Q 中的那些。 .d.ts@types .通过调用 const def = Q.defer<string, string, number() 来测试这个加薪 Supplied parameters do not match any signature of call target. .

最佳答案

你可以这样做:

declare namespace Q {
    export interface Deferred<T, E=any, N=any> {
        promise: Promise<T>;
        resolve(value?: IWhenable<T>): void;
        reject(reason: E): void;
        notify(value: N): void;
        makeNodeResolver(): (reason: any, value: T) => void;
    }
}

您不能重命名通用参数 T , 如果你添加任何额外的参数,它们需要有默认值,以便 Deferred 的其他用途不需要额外的东西。

更新 1

@桑迪吉福德said :

For brevity I left out the modification to bits of Q that used Deferred. I've edited my question to include them. This still didn't seem to work - calling Q.defer<string, string, number>() still raises an exception.



您仍然必须为添加到 defer 的任何额外泛型类型提供默认参数。功能。我不知道你的项目到底是如何布局的,但这样的东西对我有用,模块增强:
import { Q } from 'q'

declare module 'q' {
  namespace Q {

    interface Deferred<T, R=any, N=any> {
      reject(reason: R): void;
      notify(value: N): void;
    }

    function defer<T, R=any, N=any>(): Deferred<T, R, N>;
  }
}

Q.defer<string, string, number>();

关于typescript - 从包中修改命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45195975/

相关文章:

python - 使用 lxml 在 python 中解析多个命名空间 XML

python - 修改Python导入脚本的命名空间

javascript - FormArray - 如何将字符串数组传递给它?

angularjs - 我可以在函数中创建一个 TypeScript 类并引用它的参数吗?

C++:命名空间中变量的生命周期

c# - MSDN Crystal 报表教程中缺少 hierarchical_grouping 的 Using 指令

php - 调用在另一个命名空间中定义的不带前缀的 PHP 函数

javascript - 将 Angular 1.x Controller 转换为 TypeScript 时出现问题

javascript - 尝试为菜单/导航栏中的事件/默认选项卡设置 CSS,但事件类不起作用

typescript - 找不到任务 'func : host start'