Пустой тип
Тип empty не имеет значений. Это подтип всех остальных типов (нижний тип), противоположность unknown.
function throwIt(msg: string): empty {
throw new Error(msg);
} empty — это нижний тип Flow, которому в TypeScript соответствует never. Полное сравнение см. в разделе Обозначения типов в Flow и TypeScript.
Когда это использовать
Используйте empty в качестве типа возвращаемого значения функций, которые ничего не возвращают (они всегда выбрасывают исключение). Также можно привести значение к типу empty, чтобы проверить полноту обработки: если вы исключили все элементы объединения, оставшееся значение должно иметь тип empty:
function f(x: 'a' | 'b'): number {
switch (x) {
case 'a':
return 1;
case 'b':
return 2;
default:
return x as empty;
}
} Если бы вы не проверили все элементы объединения (например, изменили x, чтобы он имел тип 'a' | 'b' | 'c'), то x больше не имел бы тип empty в default, и Flow выдал бы ошибку.
Примечание. Если вы хотите, чтобы перечисления по умолчанию проверялись на полноту, без необходимости приводить значения к типу
empty, вы можете включить и использовать в проекте перечисления Flow.
Поскольку empty — подтип всех типов, для значений типа empty разрешены любые операции. Однако, поскольку значения не могут иметь тип empty, это «безопасно», в отличие от any.
const str = "hello";
if (typeof str === "string") {
str as string; // Yes it's a string
} else {
// Works! Since we will never enter this branch
str as empty;
const n: number = str + 1;
} Выше слово «безопасно» взято в кавычки, поскольку из-за пробелов в системе типизации вашего кода или ошибок в самом Flow возможны значения с типом empty.
Чтобы найти код, типизированный как empty, можно использовать команду coverage.
См. также
-
Неизвестный тип — супертип всех типов (противоположность
empty) - Любой тип — небезопасный обходной путь, который одновременно является верхним и нижним типом
-
Иерархия типов — взаимосвязь
empty,unknownиanyв полной иерархии типов -
Объединения — приведение к типу
emptyв ветвиdefaultподтверждает полноту обработки всех элементов объединения - Выражения match — сопоставление с образцом со встроенной проверкой полноты
© 2013–present Facebook Inc.
Licensed under the MIT License.
https://flow.org/en/docs/types/empty