我有这个简单的函数来检查一个未知的值是否看起来像Date
对象:
function looksLikeDate(obj: unknown): obj is { year: unknown; month: unknown; day: unknown } {
return (
obj !== null && typeof obj === "object" && "year" in obj && "month" in obj && "day" in obj
);
}
但是对于代码的"year" in obj
部分,我得到以下错误:
对象可能为'null'。(2531)
当我切换obj !== null
和typeof obj === "object"
时,错误消失:TS Playground Link
typeof null === 'object'
如果你在null
检查之后做typeof
检查,obj
可以为空,即使你之前检查了null
,但是TS编译器有点naïve。
typeof obj === 'object'
将类型从"not null">更改为object | null