打字稿不推断对象的非null成员

时间:2019-09-19 18:23:28

标签: typescript type-inference

很抱歉,如果已经提出此问题,如果有答案,我会很乐意将其关闭。

我经常想在代码中进行字段验证,但是打字稿似乎并不能说明我正在这样做。

这是一个简单的例子来说明我的问题。

interface Something {
   a?: string;
   b?: string;
}

function validateFieldsExist(obj: Something) {
    return obj.a && obj.b;
}

function doStuff(obj: Something) {
    if (!validateFieldsExist(obj)) {
        return;
    }
    console.log(obj.a.length);   // TYPESCRIPT COMPLAINS
}

有什么办法可以实现?

1 个答案:

答案 0 :(得分:0)

您需要将该函数声明为type guard,以告知编译器它检查其参数的类型:

function validateFieldsExist(obj: Something): obj is Required<Something> {
    return !!obj.a && !!obj.b;
}

Demo