如何将已知为类型键的字符串用作对象索引?
解决TypeScript索引类型报错问题
针对你遇到的问题,有两种常用且有效的解决方式:
1. 严格约束输入的field类型(推荐)
直接把input对象的field字段类型限定为keyof Activity,让TypeScript明确知道这个字段是Activity的合法属性键,同时还能保证类型安全:
type Activity = { status: string, id: number, // 其他属性... } function update(activity: Activity, input: {field: keyof Activity, content: string}){ activity[input.field] = input.content; }
这种方式不仅解决了报错,还能在调用update函数时自动校验field的合法性,避免传入非法属性键。
2. 使用类型断言(适合无法约束输入类型的场景)
如果由于某些原因无法修改input的类型定义,可以通过类型断言告诉TypeScriptinput.field是Activity的合法键:
type Activity = { status: string, id: number, // 其他属性... } function update(activity: Activity, input: {field: string, content: string}){ activity[input.field as keyof Activity] = input.content; }
或者也可以断言activity为可索引的类型,但这种方式会失去部分类型检查:
function update(activity: Activity, input: {field: string, content: string}){ (activity as Record<string, string>)[input.field] = input.content; }
注意:类型断言是开发者向TypeScript做出的“保证”,如果实际传入的field不是合法属性键,运行时可能会出现问题,所以仅在你100%确认输入合法性时使用。
内容的提问来源于stack exchange,提问作者DaniloMourelle
相关产品推荐
相关产品推荐

