typescript - 允许泛型仅是对象的数组键
问题描述
我正在尝试编写一个工厂函数,该函数接受来自对象的键进行过滤。这是相关的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
解决方案
要使用像K
您需要使用映射类型语法的键类型:
function getNodesOfTypeFactory<
K extends keyof T,
T extends { [key in K]: any[] },
>(aryKey: K): (node: T) => T[K] { ...
请注意,[key in K]
而不是[key: K]
.
推荐阅读
- openssl - openssl rand 中的 num arg 是什么意思?
- django - 定义的可选表单字段不是那么可选
- python - 如何分组然后将结果写入 csv(以及更多)
- angular - 模板解析错误:创建自定义表单元素时没有 NgControl 提供程序
- php - 小数分隔符
- javascript - JavaScript:如何从子对象创建对父对象的引用?
- c# - 如何在不混合来自其他并行请求的 cookie 的情况下方便地从共享的静态 HttpClient 中提取单个响应 cookie?
- osquery - 如何在 Windows 中将 osquery 的控制台结果保存为 csv 或 excel
- python - 从普通函数创建生成器函数
- ruby-on-rails - 无法使链接的 datetimepicker 在 rails 应用程序上工作