javascript - TypeScript,没有带有“字符串”类型参数的索引签名
问题描述
我正在尝试使用写在数组中的一些字段顺序规则来订购一个对象:
这是订单规则:
const fieldsOrder = [
'agentID',
'agentSequence',
'token'
];
这是需要订购的对象:
const request = {
token: 'TEST',
agentSequence: true,
agentID: '40208697',
}
所以我的想法是这样做:
const feeLookupRequest = {};
for(const field of fieldsOrder) {
if (request[field]) {
feeLookupRequest[field] = request[field]; // ERROR
}
}
它有效,我可以制作一个console.log(feeLookupRequest)
显示:
{
agentID: '40208697',
agentSequence: true,
token: 'TEST'
}
但是我遇到了一些我不太了解的类型错误:
TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used
to index type '{}'. No index signature with a parameter of type 'string' was found on type '{}'.
有什么提示吗?
编辑:实际上,如果我发送agentSequence: false
的feeLookupRequest
对象没有agentSequence
属性,我不知道我该如何管理它。
测试代码:
解决方案
首先,您不应该期望对象上有特定顺序的键。这就是为什么尝试对它们进行排序不是一个最佳主意。
从错误开始,您应该指出request
并feeLookupRequest
具有索引
const fieldsOrder = [
'agentID',
'agentSequence',
'token'
];
const request: Record<string, any> = {
token: 'TEST',
agentSequence: '7',
agentID: '40208697',
};
const feeLookupRequest: Record<string, any> = {};
for (const field of fieldsOrder) {
if (request[field]) {
feeLookupRequest[field] = request[field]; // ERROR
}
}
推荐阅读
- android - 构建失败并出现异常。调试时颤振中的Gradle错误
- java - java 测试如何使用应用程序类/方法
- xml - 如何使用 cl_xslt_processor 解析带有命名空间的 XML 文档?
- abap - 在 ME_INFORECORD_MAINTAIN_MULTI 的 RFC 之后不会提交更改
- ios - 如何使自定义 UIView 属性在它们退出视图边界后立即消失?
- java - SAP Java 连接器
- r - R ggplot在时间序列中自定义月份标签
- javascript - 使用 setInterval (javascript) 时无法读取未定义的属性“推送”
- flutter - 运行颤振医生后bash中的颤振错误
- android - 使用 OpenTK 的 Signal 11 (SIGSEGV) 崩溃