Есть ли способ отличить `{x ?: boolean}` и `{x: boolean | undefined}`?

#typescript

#typescript

Вопрос:

Это работает для обоих aGood и aBad :

 type AOptional = {x?: boolean};
const aBad: AOptional = { x: undefined };
const aGood: AOptional = { };
  

Я не хочу, чтобы это работало. Я хочу только aGood пройти проверку типа.
Есть ли способ определить AOptional таким образом, чтобы обеспечить это?

Спасибо!

Комментарии:

1. Я не думаю, что мы можем сделать это для переменной .. мы могли бы придумать что-нибудь для параметра функции… но мне любопытно, почему вы хотите запретить одно, но разрешить другое..

2. Это скорее принципиальный вопрос — я думал, должен быть способ отличить: {x?: boolean} и {x: boolean|undefined} , но его нет

3. Вы можете их различать, { x: boolean | undefined } присваивается { x?: boolean } , но не наоборот. Но объектный литерал с типом { x: undefined } будет присваиваться {x?: boolean} .

4. хорошо, да. Это хороший момент. Вы можете скопировать комментарий к ответу 🙂

Ответ №1:

Вы можете различать между { x: boolean | undefined } и { x?: boolean } . { x: boolean | undefined } присваивается { x?: boolean } , но не наоборот.

Но объектный литерал с типом { x: undefined } будет присваиваться {x?: boolean } при любых настройках компилятора.