gpt4 book ai didi

typescript - 从包中修改命名空间

转载 作者:行者123 更新时间:2023-12-04 16:55:45 24 4
gpt4 key购买 nike

我正在使用通过 @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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com