typescript 检查对象是否有效

eqqqjvef  于 2023-11-20  发布在  TypeScript
关注(0)|答案(1)|浏览(184)

我在创建一个检查对象是否有效的函数时遇到了一个问题。

const isPeriodValid = (period: Period | null): boolean => {
   return period && period.start && period.end;
} 

export interface Period {
   start: number,
   end: number
}

字符串
My IDE says:TS2322:Type 'number|“null”不能赋值给类型“boolean”。 类型'null'不能赋值给类型'boolean'.并建议我返回:null| 0 |number
我做错了什么?

pbgvytdp

pbgvytdp1#

好吧,根据你的Period类型声明和你的函数逻辑,你从你的函数返回一个数字或null,所以TypeScript对你声明你返回一个布尔值的事实提出了质疑。
一个快速的解决方案是强制计算结果为布尔值:

const isPeriodValid = (period: Period | null): boolean => {
   return !!(period && period.start && period.end);
} 

export interface Period {
   start: number,
   end: number
}

字符串
一个更简洁的解决方案是创建一个类型 predicate :

const isPeriodValid = (period: Period | null): period is Period => {
   return period != null && 'start' in period && 'end' in period;
   // or strictly based on the type system: return period !== null;
} 

export interface Period {
   start: number,
   end: number
}


这样做的另外一个好处是,如果你想在代码中进一步使用period变量,它会被Assert为Period类型。

相关问题