Я считаю, что вы можете использовать оператор ненулевого утверждения , чтобы сообщить транспилятору, что даже если он может быть нулевым, пожалуйста, просто рассматривайте его как определенно ненулевое,
в ситуации, когда вы нужно, чтобы его обрабатывали как "действительно не нулевой", постфиксируйте его с ненулевым оператором утверждения (восклицательный знак)
Я не думаю, что транспилятор заботится о том, определили вы его или нет, его просто волнует, что тип равен, и если его nullable
в машинописном смысле слова (т.е. число? или строка?), то его тип на самом деле будет string | null
или number | null
, и прозрачность не будет заботить, есть ли у вас явно установить или нет . Это то, во что я верю, кто-то поправит меня, если я ошибаюсь
var x : string | null = null
var y = x.substring(0, x.length / 2); // oop! it could be null compilation error
var y = x!.substring(0, x!.length / 2); // use of assert non null operator prevents transpilation error
Другой возможной альтернативой было бы использовать правильно набранный временный объект, а затем назначить его descr_json
const temp: { [key: string]: string } = {};
property.descr_json.forEach(subProperty => {
temp[subProperty] = '';
});
pValues.descr_json = temp;