首页 > 解决方案 > 打字稿,在“{}”类型上找不到带有“字符串”类型参数的索引签名

问题描述

我有这个功能:

const fieldsOrder = [
  'boo',
];

fieldsOrder.reduce((sortedRequest, key) => {
  if (key in request)
    sortedRequest[key] = request[key]; // Here are the warnings
  return sortedRequest;
}

sortedRequest是一个对象,与 相同request,所以我有关于在对象中使用索引的警告。在普通的 javascript 中可以正常工作,我如何处理和修改代码以不出现该警告?

我不能使用type 定义sortedRequestrequestas或任何东西,否则 Elinst 会抛出错误(我也不能更改该规则)。anyany

编辑:

我已经尝试过 tscpp 的回答。这是我现在的代码:

export default function sortFields (
  request: Record<string, unknown>
): Partial<FeeLookupRequest> {
  return fieldsOrder.reduce((sortedRequest: Record<string, unknown>, key) => {
    if (key in request) {
      sortedRequest[key] = request[key];
    }
    return sortedRequest;
  }, {});
}

现在没有任何警告。

标签: typescripttypescript-typings

解决方案


的类型fieldsOrder是类型{}。该类型{}没有键。您需要使用例如objectRecord<string, unknown>最好键入 fieldsOrder。


推荐阅读