Typescript允许我编写这样的代码:
export enum ActivityType {
FREERIDE = "FREERIDE",
SKI_TOUR = "SKI_TOUR",
}
const activityDesctription: {
[key in ActivityType]: string
} = {
[ActivityType.FREERIDE]: "Freeriding",
[ActivityType.SKI_TOUR]: "Ski-touring"
};
in
表达式为我提供了非常严格的类型安全性,即activityDesctription必须包含枚举的每个成员的定义,而不是更少,而不是更多。它还会生成适当的索引运算符。
如何在Flowtype中表达in
表达式?
答案 0 :(得分:1)
如果您想让activityDescription
与ActivityType
完全相同,并在缺少某些内容时抱怨,请使用$ObjMap
({{3 }})。 docs
const ActivityType = {
FREERIDE: "FREERIDE",
SKI_TOUR: "SKI_TOUR",
}
type StringValue = <V>(V) => string
const activityDescription: $ObjMap<typeof ActivityType, StringValue> = {
[ActivityType.FREERIDE]: 'yo',
[ActivityType.SKI_TOUR]: 'this is fun',
}
您可以使用$Keys<typeof obj>
来提取obj的键。 Flow try和Docs。
更新:如评论中所述,当ActivityType
中缺少activityDescription
的键时,此解决方案不会引发编译错误。
const ActivityType = {
FREERIDE: "FREERIDE",
SKI_TOUR: "SKI_TOUR",
}
const activityDescription: {
[$Keys<typeof ActivityType>]: string
} = {
[ActivityType.FREERIDE]: "Freeriding",
[ActivityType.SKI_TOUR]: "Ski-touring",
error: 'error' // flow errors here
};