给定
type Maybe<T> = T | undefined;
class Obj {
jbo: Maybe<Jbo>;
}
,是否可以定义给定
o: Maybe<Obj>
断言o
和o.jbo
的类型的函数?我在想类似的东西:
function everythingIsDefined(o: Maybe<Obj>):o is Obj && o.jbo is Jbo {
// checks in here
}
最佳答案
用户定义的typeguard只能返回一个x is T
。幸运的是,您可以在T
的选择中使用并集和交集。因此,例如:
function everythingIsDefined(o: Maybe<Obj>): o is Obj & {jbo: Jbo} {
return typeof o !== 'undefined' && typeof o.jbo !== 'undefined';
}
everythingIsDefined
函数断言,输入既是Obj
(与undefined相对),又是其jbo
属性是Jbo
(与undefined相对)的对象。因此,您可以像这样使用它:if (everythingIsDefined(obj)) {
console.log(obj.jbo.toString()) // no error
}