键入函数中的嵌套泛型

尼克·祖姆

这个问题是关于文件的.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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

嵌套TypeScript函数中的泛型

来自分类Dev

函数中的泛型

来自分类Dev

调用泛型类嵌套函数

来自分类Dev

函数中的 Java 泛型

来自分类Dev

将泛型嵌套到泛型中

来自分类Dev

嵌套在泛型中的类的泛型使用

来自分类Dev

C#中的嵌套泛型问题

来自分类Dev

f#中的嵌套泛型约束

来自分类Dev

在 TypeScript 的嵌套泛型中创建实例

来自分类Dev

如何在TypeScript中显式键入泛型函数?

来自分类Dev

嵌套泛型/抽象类C#中的嵌套泛型的继承

来自分类Dev

Java嵌套泛型

来自分类Dev

嵌套泛型继承

来自分类Dev

抽象函数中的Scala泛型

来自分类Dev

在Delphi中包装函数调用泛型

来自分类Dev

函数列表中的泛型类型

来自分类Dev

Haskell函数中的泛型与刚性类型

来自分类Dev

构造函数参数中的泛型

来自分类Dev

Java构造函数中的泛型?

来自分类Dev

Java在构造函数中定义泛型

来自分类Dev

函数列表中的泛型类型

来自分类Dev

泛型构造函数中的重载解析

来自分类Dev

函数签名中的泛型类型

来自分类Dev

静态非泛型类中的泛型函数?

来自分类Dev

打字稿:在这种情况下如何使用泛型键入函数?

来自分类Dev

嵌套在泛型类中的私有类也应该是泛型的吗?

来自分类Dev

是否可以简化C#中的嵌套泛型?

来自分类Dev

推断打字稿中嵌套的泛型类型?

来自分类Dev

Genie中嵌套的泛型类型的语法是什么?