В чем разница между (a:? String) и (a ?: string) в типе потока? - PullRequest
0 голосов
/ 01 мая 2018

В чем разница между a?: string и a: ?string в потоке?

function concat(a: ?string, b: ?string): string {
}

против

function concat(a?: string, b?: string): string {
}

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

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
0 голосов
/ 01 мая 2018

a?: string - это необязательный параметр . Из документов:

Необязательные параметры будут принимать пропущенные, undefined или подходящие типы. Но они не примут null.

a: ?string - это , может быть, типа . Из документов:

Обычно в коде JavaScript вводятся «необязательные» значения, чтобы вместо этого можно было опустить значение или передать значение NULL.

...

Возможно, типы принимают указанный тип, а также null или undefined. Итак, число будет означать number, null или undefined.

Таким образом, главное отличие состоит в том, что вы можете использовать null для типа Maybe, но не для необязательного параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...