我想为接口定义一个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"]
我该如何实现?甚至有可能在Typescript中使用?