这个问题是关于文件的.d.ts
声明.js
。
我正在尝试声明一个在泛型内部具有泛型的函数,但似乎无法正确实现。该函数本质上是Array#forEach
对象({[key: string]: E}
)的函数。
我尝试了以下方法,但是VSCode intellisense似乎不理解该对象的属性值的类型。
打字文件:
export module Util {
export function forEach<K, T extends { [key: string]: K }>(obj: T, callbackfn: (value: K, key: string, object: T) => void): void;
}
JavaScript调用:
if (undefined) var { Util } = require("./globals");
/** @type {{ [key:string]: number }} */
var obj = {};
Util.forEach(obj, function (value, key, object) { });
源代码forEach
:
function forEach(obj, callbackfn) {
if (!(obj instanceof Object)) throw Error("Util.forEach called on non object");
for (var key in obj) callbackfn.call(obj, obj[key], key, obj);
}
我的代码没有问题。如您所见,将对象属性类型正确导入到JS文件和TS文件中时:
已通过Visual Studio Code 1.43.1和Node.js 13.11.0测试
我已经在这里上传了代码:https : //github.com/Guerric-P/typescript-test
编辑:
现在,我了解了您的实际问题,这是您的处理方法:
export module Util {
export function forEach<T, T1 extends keyof T, T2 extends T[keyof T]>(obj: T, callbackfn: (value: T2, key: T1, object: T) => void): void;
}
给出以下内容:
如果您想了解为什么为什么string | number
不是键类型的更多详细信息string
,请检查以下问题:Keyof infering string | 当键只是一个字符串时的数字
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句