У нас есть обходное решение в этой ситуации, которое не нарушает проверку типа?
// Error
function foo({name = 42}: {name: ?number}) {
// ^ null or undefined [1] is incompatible with number [2].
console.log(name);
}
Решение из ошибки предотвращает поток от проверки типа значения по умолчанию.
// Correct
const foo = ({name = true}: $Subtype<{name: ?string}>) => {
// ^ flow does not check this
console.log(name);
}
У нас есть старая база кода для добавления типов, поэтому мы не хотим менять функциональность.
Аргумент destructuring в теле вместо заголовка - отлично работает для меня.
function foo(arg: {name: ?number}) {
const { name = 42 } = arg;
// the default value is only used for undefined values.
console.log((name: (number | null)));
}
Единственным обходным решением, которое также поддерживает безопасность типов, является не использование деструктурирования:
function foo(props: {name: ?number}) {
let name = props.name === undefined ? 41 : props.name;
console.log(name);
}