Как предотвратить красное подчеркивание на свойствах объекта? - PullRequest
1 голос
/ 16 мая 2019

У меня проблемы с линтером в следующем коде, и я не могу понять, почему, поскольку я разрешаю возвращать дату в виде строки или ноль, но при возврате строки она выделяется красным подчеркиванием.

static test(): { date: string | null, from: string | null, until: string | null } {

    let returnObj = { 
      date: null, 
      from: null, 
      until: null 
    };

    // Type 'string' is not assignable to type null
    returnObj.date = 'some string';

    return returnObj;
  }

ВАЖНО: я не хочу использовать @ ts-ignore, так как у меня есть несколько похожих назначений, поэтому наличие @ ts-ignore для каждого из них делает код быстрым безобразным.

Спасибо!

1 Ответ

2 голосов
/ 16 мая 2019

Я предполагаю, что вы используете --noImplicitAny и --strictNullChecks, поскольку именно так я могу заставить эту ошибку произойти.

Проблема в том, что предполагаемый тип свойств в returnObj равен null.

Возможно, вам лучше всего создать интерфейс и использовать его:

interface Stuff {
  date: string | null;
  from: string | null;
  until: string | null;
}

class Example {
  static test(): Stuff {
    let returnObj : Stuff = { 
      date: null, 
      from: null, 
      until: null 
    };

    returnObj.date = 'some string';

    return returnObj;
  }
}

Другой вариант - использовать отдельные переменные для значений, а затем создать объект в конце:

class Example {
  static test(): { date: string | null, from: string | null, until: string | null } {
    let date = null;
    let from = null;
    let until = null;

    date = 'some string';

    return { date, from, until };
  }
}

TypeScript достаточно умен, чтобы обновлять выведенный тип переменной внутри функции, как эта.(Или, конечно, объявляйте типы переменных, чтобы не приходилось выводить.)

...