La propriété n'existe pas sur le type " DetailedHTMLProps, HTMLDivElement>' à Réagir 16
Depuis Réagir 16 permet maintenant de personnalisé des attributs DOM, j'ai essayé de tirer profit de mon Tapuscrit code:
import * as React from 'react';
<div className="page" size="A4">
</div>
mais recevoir ce message d'erreur:
erreur TS2339: la Propriété "taille" n'existe pas sur le type de
'DetailedHTMLProps< HTMLAttributes< HTMLDivElement>, HTMLDivElement>'.
Ce fil suggère de faire un module augmentation
, j'ai donc essayé de cette façon:
import * as React from 'react';
declare module 'react' {
interface HTMLProps<T> {
size?:string;
}
}
Même message d'erreur.
Enfin, j'ai aussi essayé de déclarer page
comme une nouvelle balise HTML:
declare global {
namespace JSX {
interface IntrinsicElements {
page: any
}
}
}
<page className="page" size="A4">
</page>
Il se débarrasse de la message d'erreur, mais le size
attribut est complètement ignoré dans le code compilé, et je me retrouve avec:
<page className="page">
</page>
Idéalement, la dernière est ma solution préférée. Je voudrais utiliser le size
attribut personnalisé aux côtés de la page
balise personnalisée.
tsconfig.js
{
"compilerOptions": {
"outDir": "build/dist",
"module": "esnext",
"target": "es5",
"lib": ["es6", "dom"],
"sourceMap": true,
"allowJs": true,
"jsx": "react",
"moduleResolution": "node",
"rootDir": "src",
"forceConsistentCasingInFileNames": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noImplicitAny": true,
"strictNullChecks": true,
"suppressImplicitAnyIndexErrors": true,
"allowSyntheticDefaultImports": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"allowUnusedLabels": true,
"allowUnreachableCode": true
}
}
data-size
?Wow... Il s'est débarrassé de mon erreur, et compilé! Ce qui fait que vous pensez de ceci et pourquoi cela fonctionne, par opposition à un "non dash" nom comme la taille? Pourriez-vous écrire que comme une réponse afin que je puisse valider?
OriginalL'auteur Greg Forel | 2017-09-14
Vous devez vous connecter pour publier un commentaire.
HTML prend en charge les données* type d'attribut pour les attributs personnalisés. Vous pouvez lire à ce sujet plus ici.
Plutôt que de simplement en utilisant
size="A4"
vous pouvez utiliserdata-size="A4"
Exemple
Comme je l'ai dit je ne connais pas trop le Tapuscrit. Peut-être une meilleure explication. merci pour le upvote si
OriginalL'auteur bennygenel
Pas entièrement liées, mais disons que vous voulez accepter les attributs supplémentaires dans votre composant personnalisé, en utilisant la propagation de l'opérateur comme
...rest
. Heres la façon dont vous le faites:OriginalL'auteur mayid
Réagir définition de type de fichier (par défaut -
index.d.ts
lors regarder aveccreate-react-app
) contient la liste de tous les éléments HTML standard, ainsi que des attributs connus.Afin de permettre personnalisé attributs HTML, vous devez définir, elle est en train de.
Faire que par l'expansion de
HTMLAttributes
interface:Éventuellement liés à la question:
Comment puis-je ajouter des attributs pour les éléments existants de HTML en caractères d'imprimerie/JSX?
OriginalL'auteur yuval.bl