首页 > 解决方案 > 允许泛型仅是对象的数组键

问题描述

我正在尝试编写一个工厂函数,该函数接受来自对象的键进行过滤。这是相关的TS:

function getNodesOfTypeFactory<
  K extends keyof T,
  T extends { [key: K]: any[] },
>(aryKey: K): (node: T) => T[K] {

简而言之,我想告诉它我有一个类型的对象,T它的键类型K是一个数组。它在抱怨我key需要是 type string | number。有什么想法吗?

另一个失败的尝试:

function foo<
    T,
    K extends keyof T,
    >(key: K, node: T extends { [key]: any[] }) {
// -------------------------------------------^ '?' expected

标签: typescript

解决方案


要使用像K您需要使用映射类型语法的键类型:

function getNodesOfTypeFactory<
  K extends keyof T,
  T extends { [key in K]: any[] },
>(aryKey: K): (node: T) => T[K] { ...

请注意,[key in K]而不是[key: K].


推荐阅读