Cette question est spécifique aux fonctions arrow. Est-il possible d'inclure les valeurs par défaut à côté d'une interface dans les paramètres de fonction et sans recourir à objet.Assign ()?
interface Props {
someBoolean?: boolean;
anotherBoolean?: boolean;
children: any;
}
const DefaultValues = {
someBoolean: false,
anotherBoolean: false,
}
export const StackOverflow: React.FC<Props> = (_props: Props) => {
const props = Object.assign({}, _props, DefaultValues);
return <React.Fragment>{props.children}</React.Fragment>;
};
3 Réponses :
réponse est non. Vous ne pouvez pas ajouter de valeur code> par défaut code> à une interface code> code> ou
type code> p>Mais vous pouvez faire quelque chose comme ça. p>
xxx pré> blockQuote>
iff vous n'avez pas besoin defaultValues code> ailleurs et vous n'avez pas besoin de pouvoir se référer à (tous les) accessoires code> dans le corps de votre fonction, Ensuite, oui:
En fait, vous pouvez faire référence à des accessoires à l'aide de propriétés propres {quelqueboolcan = false, autreboolcan = false, enfants = [], ... accessoires} code>
@Seanvieira Merci de votre réponse. Pourriez-vous expliquer pourquoi vous utilisez l'interface pour réact.fc ({quelquebooleran = false, ... supplémentaireProps}: accessoires) code>?
Parce que le type de réact.fc t => réactiletypes code> et si une fonction Définition i> correspond à cette signature de type il doit Soit être () => réactiletypes code> (prendre des arguments) ou i> prendre un seul argument du type t code>. Et si l'argument doit i> être t code>, il n'y a pas de point (dans mon esprit) de dire la même chose deux fois. ("La variable stackoverflow code> est une fonction de myPropType code> à élément code>, à laquelle nous affectons une fonction qui prend un myPropType code > et renvoie élément code> ", vs." La variable stackoverflow code> est une fonction de myProptype code> à élément code> ").
Vous pouvez fournir les valeurs par défaut de manière fonctionnelle, en composant votre composant. Utilisation: P> const StackOverflowWithDefaults = withDefaults(StackOverflow, { someBoolean: false, anotherBoolean: false });
<StackOverflowWithDefaults>
The only prop I need to provide is children
</StackOverflowWithDefaults>
Conspensign = Object.Assign ({}, _Props, DefaultValues); code> ne semble pas correct.DefaultValues CODE> écrasera chaque accessoire existant dans_props code>. Devrait changer la commande àobjet.Assign ({}, défaitevalues, _props); code>Ah oui, merci pour la correction.