Wie kann ich Attribute hinzufügen, um die vorhandenen HTML-Elemente im Typoskript/JSX?

Jemand wissen, wie Sie richtig hinzufügen/erweitern, werden alle systemeigenen HTML-element Attribute mit benutzerdefinierten lieben?

Mit das Typoskript Dokumentation für die Zusammenführung der Schnittstellen, ich dachte, ich könnte das einfach machen:

interface HTMLElement {
    block?: BEM.Block;
    element?: BEM.Element;
    modifiers?: BEM.Modifiers;
}

<div block="foo" />; //error

Aber ich bekomme die folgende Intellisense-Fehler in vscode 1.6.1 (spätestens):

[ts] - Eigenschaft 'block' existiert nicht auf Typ 'HTMLProps'.

Den HTMLProps auf die Sie sich beziehen, ist React.HTMLProps<T> und die div element deklariert ist, verwenden Sie es wie so:

namespace JSX {
    interface IntrinsicElements {
        div: React.HTMLProps<HTMLDivElement>
    }
}

Ich habe versucht, redeclaring die div, aber ohne Erfolg.

Verwandte: https://github.com/Microsoft/TypeScript/issues/11684

Edit: Hier ist, was schließlich für mich arbeiten:

declare module 'react' {
    interface HTMLAttributes<T> extends DOMAttributes<T> {
        block?: string
        element?: string
        modifiers?: Modifiers //<-- custom interface
    }
}
  • Was extending React.HTMLProps<T>? Oder sogar Verschmelzung Erklärungen mit React.HTMLProps<T>?
  • Ich habe beide ausprobiert und Sie funktionieren nicht gut. Verlängerung nicht helfen, denn ich kann nicht zwingen, es zu benutzen, mein interface, es müssen nur React.HTMLProps<T> Zusammenführen und Erklärungen einfach nicht funktioniert, es völlig ignoriert haben. Wenn du einen Fall wo es funktioniert, überlegen Sie als Antwort.
  • die Zusammenlegung der Erklärungen einfach nicht arbeiten, ich nehme an, du meinst namespace React { interface HTMLProps<T> { /*custom elements here*/ } }? Ich weiß nicht, was die HTMLProps Erklärung aussieht, kann es notwendig sein, zu entsprechen.
  • Ich habe eine Frage: warum ist dies nötig? Ist es ein problem mit der data-* Eigenschaften?
  • können Sie erstellen, Spielplatz, codepen oder jsfiddle ?
InformationsquelleAutor jedmao | 2016-10-17
Schreibe einen Kommentar