a: ?string
- это Возможно, введите - на самом деле string | null | void
в этом случае.
a?: string
является необязательным свойством / paramerter - string | void
Разница между ними заключается в том, что может быть тип также может быть (в дополнение к самому типу) null
или void
, и только необязательный параметр void
.
При вызове функции с необязательными или, возможно, параметрами function foo(a?: string)
или function(a: ?string)
- в обоих случаях параметр может быть опущен.
Другое отличие заключается в свойствах объекта - только необязательные свойства могут быть опущены:
type WithOptional = {
foo?: string;
}
type WithMaybe = {
foo: ?string;
}
const a: WithOptional = {}; // OK
const b: WithMaybe = {}; // Error