TypeScript - нет «Переменная используется перед назначением» внутри функции - PullRequest
2 голосов
/ 12 апреля 2020

Я хотел бы понять следующее поведение TypeScript:

Следующий код

let a: number
if (a === undefined) {
    console.log("how?")
}

выдает ошибку: «Переменная« a »используется перед присвоением.».

Но следующий код

let a: number
const f = (): void => {
    if (a === undefined) {
        console.log("how?")
    }
}
f()

прекрасно работает и регистрирует "как?".

Почему это так? А также, как получилось a === undefined, если его тип number?

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

По второму вопросу: в TS переменные, не инициализированные, всегда undefined, независимо от их типа. Это отличается, например, от C#, где переменная типа bool всегда имеет значение true или false и инициализируется как false. В TS эта переменная также может быть неопределенной и, если я хорошо помню, также нулевой. Поэтому иногда лучше написать

if( testVariable === false)

вместо простого

if( !testVariable )
1 голос
/ 12 апреля 2020

В проекте Typescript GitHub есть открытый выпуск . Это ограничение технического дизайна машинописи.

От Райана Кавано это

, потому что мы не включаем эффекты управления потоком функций

...