Является ли `{}` функционально эквивалентным `not null & not undefined`?

Я нахожусь в ситуации, когда я хотел бы ввести значение как «любое, кроме неопределенного». Я знаю, что тип {} представляет собой пустой объект, и поскольку каждое значение в JavaScript является объектом, за исключением undefined и null, {} кажется эквивалентным not null & not undefined (если в TypeScript существовал какой-то теоретически отрицающий оператор not).

Это здравое предположение? Существуют ли вообще какие-либо типы, кроме null и undefined, которые нельзя присвоить {}?


person Ian    schedule 13.05.2020    source источник
comment
..поскольку каждое значение в JavaScript является объектом, кроме .. - это неверная предпосылка. Например, 42 не является объектом, так как имеет тип number. Соответствующий объект будет Number(42), который имеет тип Number.   -  person user2864740    schedule 13.05.2020
comment
Мы можем снисходительно изменить это, чтобы каждое значение, кроме null и undefined, могло быть проиндексировано, как если бы оно было объектом, без получения ошибки времени выполнения.   -  person jcalz    schedule 13.05.2020
comment
И да, {} по сути является not (null | undefined) с точки зрения принимаемых значений. С типом void могут быть какие-то заморочки, но это более-менее правильно... так что все, кроме undefined, будет {} | null   -  person jcalz    schedule 13.05.2020
comment
Дайте мне знать, если вы считаете, что на этот вопрос нет ответа в связанном вопросе выше. Было бы здорово, если бы в Справочнике по TypeScript была документация для пустого типа объекта, но, похоже, ее нет. microsoft/TypeScript#10715 предлагает unknown и если/как это будет отличаться от {} | null | undefined. Фактическое unknown не рассматривается как эквивалентное {} | null | undefined, хотя почти каждое значение может быть присвоено любому из них.   -  person jcalz    schedule 13.05.2020
comment
@jcalz Это определенно отвечает на этот вопрос, спасибо.   -  person Ian    schedule 14.05.2020