Ich versuche, eine *.d.ts
Datei für React-Grid-Layout zu erstellen. Wie der index.js Datei zeigt exportiert es eine Funktion - eine Unterklasse von React.Component
ReactGridLayout
genannt:Typescript-Definition für ein Modul, das eine Funktion ist und Namespaces hat?
// react-grid-layout/index.js
module.exports = require('./build/ReactGridLayout').default;
module.exports.utils = require('./build/utils');
// ...
Erfordern:
var ReactGridLayout = require('react-grid-layout');
console.log(ReactGridLayout);
// --> function ReactGridLayout(props , context) { ...
exportiert es auch einige andere Sachen in Namespaces getrennt:
for (var f in ReactGridLayout) {
if (ReactGridLayout.hasOwnProperty(f)) {
console.log(f);
}
}
// --> utils
// ...
So ist es ein einziger Export und mehrere Exporte.
Ich versuchte den Single Complex Object in Modules Ansatz beschrieben auf der Typoskript-Website und this declaration file on GitHub, aber ohne viel Erfolg.
aktualisieren
Ignorieren der andere Sachen für jetzt meine Definition für ReactGridLayout
sieht wie folgt aus:
// react-grid-layout.d.ts
declare module 'react-grid-layout' {
import * as React from 'react';
export default class ReactGridLayout<P,S> extends React.Component<P,S> {
containerHeight():void;
onWidthChange(width:number):void;
/* more methods here ... */
}
Welche kompiliert. Allerdings erzeugt es Javascript wie:
var react_grid_layout_1 = require('react-grid-layout');
React.createElement(react_grid_layout_1.default, null, ...
Wenn es sein sollte:
React.createElement(react_grid_layout_1, null, ...
Vielen Dank Ivan, das funktioniert wirklich sehr gut! Ich hatte das Zusammenführen von Deklarationen im Beispiel [Funktionen mit Eigenschaften] (https://www.typescriptlang.org/docs/handbook/writing-declaration-files.html#functions-with-properties) gesehen, aber das konnte nicht funktionieren irgendwie. – peterwimsey