我使用strikNullCheks选项进行编程。
当! operator
与in operator
一起使用时,出现以下错误。
(这正是我使用Redux的Action的有效负载时会发生的情况。)
有没有办法解决这个问题?
感谢您阅读:)
interface Interface {
AB?: {
a: number;
} | {
b: number[];
}
}
function test(ab: Interface['AB']) {
const ab2 = ('a' in ab!) ? [ab!.a] : ab!.b;
=> error: Property 'a' does not exist on type '{ a: number; } | { b: number[]; }'.
Property 'a' does not exist on type '{ b: number[]; }'.
=> error: Property 'b' does not exist on type '{ a: number; } | { b: number[]; }'.
Property 'b' does not exist on type '{ a: number; }'
}
答案 0 :(得分:3)
in
类型保护(通常是类型保护)不适用于表达式。因此,ab!
表达式不会导致ab
的缩小。要使类型保护工作,保护表达式必须是简单的参数/变量/字段。最简单的解决方案是明确防范null
。这可能是一个好主意,因为该字段是可选的:
function test(ab: Interface['AB']) {
const ab2 = !ab ? null : ('a' in ab) ? [ab.a] : ab.b;
}