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个对象作为参数
      {mode,key,defaultKey}
      ,还是它需要ReturnType函数
    我将感谢任何帮助。提前非常感谢:)

    在您的情况下(来自沙盒):

    const anExampleVariable=“Hello World” console.log(一个示例变量) //要了解该语言的更多信息,请单击上面的“示例”或“新内容”。 //否则,从删除这些评论开始,世界就是你的游乐场。 接口查找{ 测试:数字 } 常量函数查找:查找={ 测试:5 } 常量参数={ 类型:“测试” }; 常量类型=参数类型 常量a=函数查找[类型]
    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