给定

type Maybe<T> = T | undefined;

class Obj {
    jbo: Maybe<Jbo>;
}

,是否可以定义给定o: Maybe<Obj>断言oo.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
}

09-30 20:48