我无法使用typescript
来使用简单的联合考虑以下代码
function test(v: boolean) {
if (v === true) {
return { success: 'yolo' }
}
return { error: { code: 32, message: 'nop' } }
}
const val = test(true)
if (val.error) {
alert(val.error.message)
}
我收到以下错误Property 'error' does not exist on type '{ error: { code: number; message: string; } } | { success: boolean; }'
有没有办法测试返回union中的哪个值?
谢谢!
答案 0 :(得分:1)
您可以使用自定义类型防护,就像这样 - 尽管您可以根据需要使其变得简单或复杂。我已经确定这个例子是一个独立的例子:
interface SuccessExample {
success: string;
}
interface ErrorExample {
error: { code: number; message: string }
}
function test(v: boolean) : SuccessExample | ErrorExample {
if (v === true) {
return { success: 'yolo' }
}
return { error: { code: 32, message: 'nop' } }
}
// Custom Type Guard - you can be as simple or complex as you like
function isError(arg: any): arg is ErrorExample {
return arg.error !== undefined
&& arg.error.code !== undefined
&& arg.error.success !== undefined;
}
const val = test(true)
if (isError(val)) {
alert(val.error.message)
}