Знак вопроса типа потока до или после параметра?

Может кто-нибудь объяснить разницу между:

function foo(bar: ?string) {
  console.log(bar);
}

и

function foo(bar?: string) {
  console.log(bar);
}

Когда использовать один над другим?

Ответ 1

В принципе

bar: ?string

принимает строку, null или void:

foo("test");
foo(null);
foo()

В то время как

bar?: string

Принимает только строку или пустоту:

foo("test");
foo();

Поскольку передача null вместо строки несколько бессмысленна, между ними нет реальной разницы в жизни.

Ответ 2

?string (может быть, type) означает, что свойство bar может быть string как null и void.

bar? означает, что это свойство не является обязательным.

Дополнительная информация: https://flow.org/en/docs/types/primitives/

Ответ 3

оп, пожалуйста, измените принятый ответ. Текущий принятый ответ не является правильным.