【发布时间】:2021-01-14 15:00:17
【问题描述】:
我目前有一个与此类似的函数(为了讨论,我写了一个最小工作示例):
interface Variable {
someMethod: () => void
}
const validateVariable(variable: Variable | undefined) {
if(!variable) {
throw new Error('Variable is undefined!')
}
}
const doSomething = async (): void => {
// maybeGetSomething returns a Variable or undefined
// depends on the database, so both cases are definitely possible
const variable: (Variable | undefined) = await maybeGetSomething()
validateVariable(variable)
variable.someMethod()
}
但 Typescript 抱怨 variable 可能未定义。我不喜欢将validateVariable 的代码放在doSomething 中的想法,因为在我的情况下,验证是一个重要的功能,我需要能够重用。定义一个新变量只是为了让 Typescript 不会抱怨它的类型也感觉很愚蠢,因为在验证之后它只能具有 Variable 类型(代码无法通过 validateVariable(variable) 的行,除非它没有' t 抛出,在这种情况下变量具有适当的类型)。
这样做的好方法是什么?我愿意改变我的代码结构,因为我还在学习很多关于 Typescript 的知识,我对此很灵活!
【问题讨论】:
标签: typescript types