Установите значение по умолчанию для ключа параметра функционального объекта - PullRequest
0 голосов
/ 17 июня 2019

Мне нужно перенести некоторые реквизиты в мой компонент.

type Props = {
  icon: number,
  onChangeText: Function,
  onEndEditing: Function,
  placeholder: string,
  secureTextEntry?: boolean
};
export default function LRInput(
  props: Props = { ...props, secureTextEntry: false } // I've tried to do it in this way, but it hasn't worked 
) { /*function body*/ }

Вы можете видеть, что secureTextEntry является необязательным параметром. Итак, я хочу определить значение по умолчанию для этого реквизита. Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Я бы вообще не использовал деструктуризацию, скорее добавлю необязательное свойство для нового объекта:

export default function LRInput(props: Props) {
     const defaultedProps: Props = { secureTextEntry: false, ...props };
    /* function body */
}
0 голосов
/ 17 июня 2019

Вам придется сделать это, к сожалению, разрушая (или к счастью?)

type Props = {
  icon: number,
  onChangeText: Function,
  onEndEditing: Function,
  placeholder: string,
  secureTextEntry?: boolean
};
function LRInput(
  { secureTextEntry = false, ...props }: Props
) { console.log(secureTextEntry) }

LRInput({ icon: 5 })
LRInput({ icon: 5, secureTextEntry: true })

Редактировать

Чтобы решить вашу проблему со значением по умолчанию после остальных подпорок, проблема не в том, что для машинописного текста задано целевое значение es5, поскольку синтаксис оставшейся части перенесен в нечто вроде ниже,

function LRInput(_a) { 
    var _b = _a.secureTextEntry;
    var secureTextEntry = _b === void 0 ? false : _b; 

    /* code to handle rest omitted */

    console.log(secureTextEntry); 
}

Как видите, с приведенным выше преобразованием порядок распространения не имеет значения, и в результате мой фрагмент кода ведет себя правильно. Однако, поскольку нет логического смысла захватывать «остальные» клавиш раньше других, стандарт ES2018 и Typescript требуют, чтобы вы поместили его за деструктурированными ключами { secureTextEntry = false, ...rest }.

(Я пропустил это в первый раз, потому что я скопировал отредактированный твой код, и он работал нормально, поскольку компилятор машинописного текста на этом сайте настроен на испускание, даже если он обнаруживает «ошибки компиляции» и поскольку я фактически не использовал ...props внутри функции я не осознавал, что преобразование параметра rest не работает должным образом. Вы должны увидеть в действии сами.)

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