Concepts
TypeScript
6 min
slate prend en charge la saisie d'un modèle de document slate (c'est à dire un ensemble de éditeur , élément et texte types) si vous devez prendre en charge plus d'un modèle de document, consultez la section modèles de documents multiples avertissement vous devez définir typespersonnalisés lorsque vous utilisez typescript ou slate affichera des erreurs de typage migration depuis 0 47 x lors de la migration depuis 0 47 x, lisez d'abord le guide ci dessous gardez également à l'esprit ces problèmes de migration courants lorsqu'il s'agit de node type , vous pouvez voir l'erreur la propriété 'type' n'existe pas sur le type 'node' pour corriger cela, vous devez ajouter un code comme element iselement(node) && node type === 'paragraph' cela est nécessaire car un node peut être un element ou text et text n'a pas de type propriété soyez prudent lorsque vous définissez le customtype pour editor assurez vous de définir le customtype pour editor comme baseeditor & cela ne devrait pas être editor & définir editor , element et text types pour définir un type personnalisé element ou text type, étendez l'interface customtypes dans le module slate comme ceci // this example is for an editor with `reacteditor` and `historyeditor` import { baseeditor } from 'slate' import { reacteditor } from 'slate react' import { historyeditor } from 'slate history' type customtext = { text string; bold boolean; italic boolean } declare module 'slate' { interface customtypes { editor baseeditor & reacteditor & historyeditor element { type 'paragraph'; children customtext\[] } text customtext } } meilleures pratiques pour élément et texte types bien que vous puissiez définir des types directement dans le customtypes interface, la meilleure pratique est de définir et d'exporter chaque type séparément afin que vous puissiez référencer des types individuels comme un paragraphelement en utilisant les meilleures pratiques, les types personnalisés pourraient ressembler à // this example is for an editor with `reacteditor` and `historyeditor` import { baseeditor } from 'slate' import { reacteditor } from 'slate react' import { historyeditor } from 'slate history' export type customeditor = baseeditor & reacteditor & historyeditor export type paragraphelement = { type 'paragraph' children customtext\[] } export type headingelement = { type 'heading' level number children customtext\[] } export type customelement = paragraphelement | headingelement export type formattedtext = { text string; bold boolean; italic boolean } export type customtext = formattedtext declare module 'slate' { interface customtypes { editor customeditor element customelement text customtext } } dans cet exemple, customtext est égal à formattedtext mais dans un éditeur réel, il peut y avoir plus de types de texte comme du texte dans un bloc de code qui peut ne pas permettre de formatage par exemple pourquoi la définition de type est inhabituelle parce qu'on le demande souvent, cette section explique pourquoi la définition de type de slate est atypique slate doit prendre en charge une fonctionnalité appelée discrimination de type qui est disponible lors de l'utilisation de types d'union (par exemple, paragraphelement | headingelement ) cela permet à un utilisateur de restreindre un type si on présente un code comme if (node type === 'paragraph') { } l'intérieur du bloc, cela restreindra le type de node à paragraphelement slate a également besoin d'un moyen permettant aux développeurs d'intégrer leurs types personnalisés dans slate cela se fait par le biais de la fusion de déclarations qui est une fonctionnalité d'un interface slate combine un type d'union et une interface pour offrir cette fonctionnalité pour plus d'informations, voir https //github com/ianstormtaylor/slate/issues/3725 modèles de documents multiples pour le moment, slate prend en charge les types pour un seul modèle de document à la fois par exemple, il ne peut pas prendre en charge un éditeur de texte enrichi complet pour l'édition de documents tout en ayant également un éditeur différent pour l'édition de commentaires le support typescript de slate a été conçu de cette manière car un meilleur support de typage était préférable à aucun l'objectif est de prendre en charge le typage pour plusieurs définitions d'éditeur à l'avenir, mais cela dépendra des retours de la communauté une solution de contournement pour prendre en charge plusieurs modèles de documents consiste à créer chaque éditeur dans un package séparé puis à les importer cela n'a pas été testé mais cela devrait fonctionner étendre d'autres types actuellement, il y a aussi un support pour étendre d'autres types, mais ceux ci n'ont pas été testés aussi rigoureusement que ceux documentés ci dessus sélection plage point n'hésitez pas à étendre ces types, mais l'extension de ces types doit être considérée comme expérimentale exemples typescript pour quelques exemples d'utilisation des types, voir packages/slate react/src/custom types ts dans le dépôt slate
