Javascript 箭头函数对象的Typescrit接口
我在为以下结构定义接口时遇到了一个问题:Javascript 箭头函数对象的Typescrit接口,javascript,typescript,javascript-objects,arrow-functions,Javascript,Typescript,Javascript Objects,Arrow Functions,我在为以下结构定义接口时遇到了一个问题: 接口JSONRecord{ [propName:string]:任意; } 类型ReturnType=(id:string | number,field:string,record:JSONRecord)=>string 导出常量formatDictionary=({ mode=“render”,key=“originalValue”, defaultKey=“originalValue” }):ReturnType=>(id、字段、记录)=>{ ...
接口JSONRecord{
[propName:string]:任意;
}
类型ReturnType=(id:string | number,field:string,record:JSONRecord)=>string
导出常量formatDictionary=({
mode=“render”,key=“originalValue”,
defaultKey=“originalValue”
}):ReturnType=>(id、字段、记录)=>{
...
}
接口查找{
字典:({mode,key,defaultKey}:{mode:string,key:string,defaultKey:string})=>ReturnType,
...
}
导出常量函数查找:查找={
字典:格式字典,
...
}
export const formatField=(参数:JSONRecord):字符串| ReturnType=>{
常量类型:string=params.type
if(type==未定义){return identity}
const fn=函数查找[类型]
如果(fn==未定义){return identity}
返回fn({…params})
}
我得到以下错误:
行中的const fn=functionLookup[type]
:元素隐式具有“any”类型,因为类型字符串的表达式不能用于索引类型“Lookup”。在“Lookup”类型上未找到参数为“string”类型的索引签名- 我不确定为什么会发生这种情况,我认为我在查找中定义的字典应该被解释为字符串。当我将Dictionary更改为
时,错误会消失,但我想具体说明可以传递的参数[x:string]:({mode,key,defaultKey}:{mode:string,key:string,defaultKey:string})=>ReturnType
行返回fn({…params})
:应为3个参数,但得到1个- 我真的无法理解这个问题,函数显然只需要1个对象作为参数
,还是它需要ReturnType函数{mode,key,defaultKey}
params
变量推断为{type:string}
在这里functionLookup[type]
您希望使用type
作为functionLookup
的索引,但TS不能这样工作。因为不能只使用常规类型string
作为Lookup
类型的索引
Lookup
允许您仅使用文本test
作为索引
因此,您可以将作为const
前缀添加到params
vvariable
const参数={
类型:“测试”
}作为常量;
您可以将查找设置为索引:
接口查找{
测试:数字,
[道具:字符串]:数字
}
或者,您可以显式定义参数的记录类型
:
常量参数:记录={
类型:“测试”
}
请分享可复制的示例<代码>身份未定义变量Hi@captain yossarian谢谢您的回答。我用一个更简单的例子创建了一个codesandbox,它会导致相同的错误。我仍然不明白接下来会发生什么,我现在不明白我在哪里迷路了,但现在不是说每个字符串现在都可以接受,并且将在functionLookup中查找吗?所以如果传递了错误的字符串,我应该期望未定义的值?这取决于您的逻辑。如果您坚持使用[prop:string]:number
,则-是。值可以是未定义的。如果你不想要未定义的值,那么你应该使用Record