【发布时间】:2022-01-23 18:16:45
【问题描述】:
这是一个我通过键保存函数的对象:
export const questSetHelper: { [key in QuestSetHelper]: (player: Player, payload: FlagGender | FlagOrigin | FlagAdventure) => void } = {
'setGender': setGender,
'setOriginCircumstance': setOriginCircumstance,
'setAdventureCircumstance': setAdventureCircumstance
}
我将它们保存为字符串,以便于处理从前端到后端的传递字符串,这些字符串用于确定要运行的函数。每个函数只处理一种负载类型。
例如:
export const setOriginCircumstance = (player: Player, payload: FlagOrigin): void => {
if (player.quests['intro']?.flags)
player.quests['intro'].flags['origin_circumstance'] = payload
else
throw new Error('Quest: intro - failed setOriginCircumstance')
}
当所有这些都输入到string 时,我当然没有任何类型错误,但我希望显式输入每个函数参数。
问题
显然,每个函数最终都可以处理payload 的questSetHelper 类型之一,但我想假设每个函数都将被正确调用并传递正确的类型(即FlagGender 有效负载将始终转到setGender)。
有没有更好的方法在不改变结构的情况下输入这个?
【问题讨论】:
-
你能依赖类型推断吗?它将为
questSetHelper分配一个正确、精确的类型。如果不是,请解释原因。 typescriptlang.org/play?#code/… -
泛型也应该可以工作。
-
@Lesiak 似乎依靠推理效果很好。我之前一直在尽可能明确地写出所有代码风格和代码完整性,但似乎在某些情况下不明确输入有优势。
标签: typescript typescript-typings