typescript - 如何在打字稿中定义函数类型,其变量参数名称仅限于某些接口的键
问题描述
我想为接口定义一个 Setter 函数类型。我希望它看起来像这样:
type ISetter<T, U extends keyof T> = (self: T, [s: U]: T[U])
但这会引发错误:
Type 'T[U]' must have a '[Symbol.iterator]()' method that returns an iterator
这个想法是有一个函数类型,其中参数名称被限制为某些可能的值(在 Setter 的情况下,它将是 Setter 所针对的接口的键)
我也试过:
type ISetter<T, U extends keyof T> = (self: T, [s: string]: T[U]) => T
错误:
Type 'T[U]' must have a '[Symbol.iterator]()' method that returns an iterator.ts(2488)
但是当我尝试时:
type ISetter<T, U extends keyof T> = (self: T, []: T[U]) => T // no error
这是有效的,但显然在这种情况下对参数名称没有限制。
这是一个使用示例:
export const setSku: ISetter<IProduct, "sku"> = (
self: IProduct,
sku: ISkuProjection
) => {
return {} as IProduct
}
// sku is a key on the IProduct interface
// I want to restrict the argument names to [self and "sku"]
我怎样才能做到这一点?在打字稿中甚至可能吗?
解决方案
推荐阅读
- c++ - 插入到双链表中的特定位置
- c# - 是否可以使用 foreach 在 IEnumerable 中创建新对象?
- python - 根据 Python 中的时间间隔自动填充一列
- python - 单击使用 selenium webdriver 的链接
- javascript - 使用js回调函数更新json文件内容
- python - 在 Sphinx 中创建文字文本块
- php - 来自 phpunit 的审查员和特定测试
- java - 从属性文件中读取 json 数据
- ibm-cloud - 如何找到 IBM API 的用户 ID 和密码?
- excel - 当复选框单击复制的工作表时,Excel VBA“无法获取复选框属性”