Typescript参数类型取决于另一个参数



我想为setStore创建通用函数,函数很简单:

const setStore = <T>(store:T) => <K extends keyof T,U extends boolean>(property: K,data: U extends true? Partial<T[K]>:T[K],partialUpdate:U) => {
if (partialUpdate) {
store[property] = { ...store[property], ...data }
} else {
store[property] = data // Error Type 'U extends true ? Partial<T[K]> : T[K]' is not assignable to type 'T[K]'.
}
}

我希望数据的类型是T[K]或Partial<T[K]>取决于CCD_ 1参数是真还是假。但我得到了错误Type 'U extends true ? Partial<T[K]> : T[K]' is not assignable to type 'T[K]'.,因为typescript无法决定数据类型是T[K]还是Partial<T[K]>

只需告诉typescript数据实际上是一个T[K]。

const setStore = <T>(store:T) => <K extends keyof T,U extends boolean>(property: K,data: U extends true? Partial<T[K]>:T[K],partialUpdate:U) => {
if (partialUpdate) {
store[property] = { ...store[property], ...data }
} else {
store[property] = data as T[K]
}
}

游乐场链接

相关内容

最新更新