假设我有一种类型
type Activity = {
status: string,
id: number,
...
lotOfOhterProps
}
我有一个函数可以根据输入更新活动
function update(actitvity: Activity, input: {field: string, content:string}){
// this got an error because field can not be used as index
activity[input.field]=input.content
}
但我百分之百肯定这个字段是类型的可能 prop 之一。
那么,如何解决这个问题呢?
我有一个功能
2条答案
按热度按时间vs3odd8k1#
您可以使用括号表示法来访问属性,并将input.field作为字符串使用,如下所示:
as keyof Activity语法称为类型Assert,它告诉TypeScript input.field可以用作索引/键来访问Activity对象属性。
dbf7pr2w2#
为了进行类型检查,编译器不仅需要知道
input.field
是Activity
的键之一(即,使用keyof
类型运算符的keyof Activity
),它还需要知道input.content
是对应于该键的正确的属性 * 值 * 类型。这意味着您应该使update()
generic成为input.field
的K
类型,并告诉编译器input.content
将成为Activity[K]
类型,indexed access type表示"在类型K
的索引处的Activity
的属性类型":既然编译时没有错误,并且在调用时还应该提供一些类型安全:
Playground代码链接