【发布时间】:2021-12-27 01:35:10
【问题描述】:
我的代码:
import {
createAction
} from '@reduxjs/toolkit'
const myFunctions = {
f1: (payload: number) => ({
payload,
}),
f2: (payload: string) => ({
payload,
}),
f3: () => ({}),
}
type TFunctions<Obj> = {
[Prop in keyof Obj]: Obj[Prop]
}
const functionGenerator = <_, T>(prefix: string, fObj: T): TFunctions<T> => {
const returnFunctions: any = {}
Object.keys(fObj).map(key => {
returnFunctions[key] = createAction(`${prefix}/${key}`, fObj[key]) // error
})
return returnFunctions;
}
export const myFunction = functionGenerator(PREFIX, myFunctions)
myFunction.f1(123)
sagaActions.f1.type // type is string of `${prefix}/${key}`
myFunction.f2('text')
sagaActions.f2.type // type is string of `${prefix}/${key}`
myFunction.f3()
export const sagaActions = functionGenerator(ADMIN, myFunctions)
从技术上讲,这段代码可以工作,但我找不到正确的打字稿来删除这个错误。 我是打字稿的初学者
错误:
1: createAction 第二个参数 Element 隐式具有“any”类型,因为“string”类型的表达式不能用于索引“unknown”类型。
2: Array.prototype.map() 需要箭头函数的返回值。(array-callback-return)
3 : 类型 '(payload: number) => { payload: number; 上不存在属性 'type' }'。
从 1 2 我可以忽略我会尝试找到一些解决方案或在文件中设置忽略所有错误,但 3 它在其他文件上使用时很关键,我无法理解 [Prop in keyof Obj] 中的方式:Obj[ Prop] 我将类型值添加为字符串
4: ReturnType
【问题讨论】:
-
请edit您的问题包含您所询问的错误文本,而不仅仅是文本图片。
-
对不起,下次我会明确我认为的代码的具体问题,因为这里没有工具可以显示问题是什么,图片会显示它
-
至于问题,您正在使用
map的副作用;只需使用结果。return Object.keys(fObj)).map(key => createAction(${prefix}/${key},fObj[key]));或者,如果您真的希望它成为一个对象,请使用fromEntries:return Object.fromEntries(Object.keys(fObj).map(key => [key, createAction(${prefix}/${key},fObj[key])]))这样可以解决错误 2。您没有显示createAction并且其他错误取决于该功能,因此无法提供帮助。 -
import { createAction } from '@reduxjs/toolkit' createAction 这个reduxjs函数
标签: typescript type-inference typescript-generics type-constraints