const x: {} = {a:1}
Приведенный выше код компилируется. Как я могу принять только пустой объект: {}?
{} принимает любой объект, содержащий несколько key. Я ищу способ объявить тип, который принимает только объект без каких-либо ключей.У меня есть функция serialize от объекта к строке и deserialize, которая делает обратное. deserialize может потерпеть неудачу, поэтому я возвращаю пустой объект. поэтому тип возвращаемого значения функции deserialize — { aaa : number ; bbb : string ; ... } | empty-object
Почему бы не вернуть undefined или null?
я думаю, я буду.






Вы можете использовать never, чтобы сделать объект пустым:
type Empty = { [key: string]: never }
См. игровую площадку машинописи: http://www.typescriptlang.org/play/#code/C4TwDgpgBAogtmUUC8UDeUDaBrCIBcUAzsAE4CWAdgoYC6hlEAbhKVAL4DcAUNwMYB7SiSgAPQvEQgU6LvyEiCsBelQZxUAIwdOQA
И я бы сказал, что это невозможно, потому что даже в строго типизированных языках вы не можете ограничить принятие более производного типа.
И то, что вы здесь имеете, в основном (под капотом) говорит, что x должен быть как минимум типа {}.
Поэтому я вижу здесь несколько вариантов:
null или undefinedOption, который либо имеет значение, либо нет, что является более функциональным способом решения проблемы возврата значения или сбоя. Здесь больше информации по теме.Обновлено: Филипп рассказал, как этого добиться, поэтому мое предположение было неверным. Но я бы все же не рекомендовал его использовать, если это возможно.
спасибо за отличную информацию. Я думаю, вы правы. option это не вариант в проекте, над которым я работаю (к сожалению), и я очень не люблю возвращать null/undefined. я думаю, что я вернусь undefined. (+ я должен принять ответ Филиппа, но я, вероятно, пойду с вами)
Мне интересно, каков ваш вариант использования?