#typescript
#typescript
Вопрос:
Я хотел бы знать, почему следующий код принимает null в typescript:
// Even when enforcing non-nullable
const foo2 = (): NonNullable => 1 || null// Here tough, it works: null is not a number
const foo3 = (i: number): number => i || null» rel=»nofollow noreferrer»>Игровая площадка TS
// Not sure why null is accepted here when I've specified number as the type
const foo = (): number => 1 || null
// Even when enforcing non-nullable
const foo2 = (): NonNullable<number> => 1 || null
// Here tough, it works: null is not a number
const foo3 = (i: number): number => i || null
Похоже, то же самое с undefined
Комментарии:
1. Для 1 и 2:
1 || null
известно компилятору как1
, и поэтому тип являетсяnumber
, неnumber | null
. Для 3: вам нужно включить--strictNullChecks
опцию компилятора вкл.
Ответ №1:
Вы неправильно ввели свои функции. Чтобы ввести foo
как () => number
и определить его как возвращаемый null
, вы должны написать, что:
const foo
: () => number // type def
= () => null; // function def
При включенных строгих проверках на нулевое значение это, как и ожидалось, number
= () => null;» rel=»nofollow noreferrer»>выдает ошибку.