Машинопись не выводит ненулевые члены объекта - PullRequest
0 голосов
/ 19 сентября 2019

Извиняюсь, если этот вопрос уже был задан, я с радостью закрою его, если для этого есть ответ.

Довольно часто я хочу выполнить проверку полей в моем коде, но машинопись не похоже на рисунокиз того, что я делаю именно это.

Вот простой пример, иллюстрирующий мою проблему.

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 голосов
/ 19 сентября 2019

Вам необходимо объявить эту функцию как type guard , чтобы сообщить компилятору, что он проверяет тип своего аргумента:

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

Demo

...