Как видно из сценария детской площадки. Сообщаемая ошибка очевидна в том, что let
объявляет переменную, но она не инициализируется, поэтому она undefined
.
. Тогда тип строки выводится из вашего присваивания внутри условного предложения.
Я не верю, что компилятор машинописного текста может сделать вывод, что во втором условном выражении переменная инициализируется и является строкой. Я видел некоторые проблемы GitHub, связанные с этим, я не могу найти ни одной ссылки, к сожалению.
Но мы можем это как-то проверить, на предоставленной вами площадке:
- Если мы инициализируем переменную пустой строкой, ошибка исчезнет.
const maybeTrue = Math.random() < 0.5
let myStr = ""
if (maybeTrue) {
myStr = 'abc'
}
if (maybeTrue) {
console.log(myStr.toLowerCase())
}
- Если переместить предложение
console.log
в первое if
, ошибка не сообщается.
const maybeTrue = Math.random() < 0.5
let myStr = ""
if (maybeTrue) {
myStr = 'abc'
console.log(myStr.toLowerCase())
}
Взгляните сюда: https://www.typescriptlang.org/docs/handbook/type-inference.html и здесь https://www.typescriptlang.org/docs/handbook/advanced-types.html для более подробной информации о том, как реализованы типы