为第 3 方节点模块创建打字稿定义文件 (react-signature-canvas)
Create a typescript definition file for a 3rd party node module (react-signature-canvas)
我将使用 React-Signature-Canvas 作为示例。
react-signature-canvas 节点模块安装在我的项目目录中如下所示:
react-signature-canvas
build
index.js
src
bezier.js
index.js
point.js
LICENSE
package.json
README.md
index.js 文件看起来具有以下签名:
export default class SignatureCanvas extends Component {
这看起来很简单。我想我会在模块的根目录中创建一个 index.d.ts,让它工作,然后找出一个更好的地方将它存储在我的项目中(即,在 node_modules 之外,在gitignore).
但我似乎无法让它工作。我的打字文件如下所示:'
declare module 'react-signature-canvas'
{
interface ISignatureCanvasProps
{
velocityFilterWeight?: number;
minWidth?: number;
maxWidth?: number;
dotSize?: number;
penColor?: string;
backgroundColor?: string;
onEnd?: () => void;
onBegin?: () => void;
canvasProps?: any;
}
class SignatureCanvas extends React.Component<ISignatureCanvasProps, any>
{
}
export = SignatureCanvas;
}
我正在尝试像这样使用签名板:
import * as React from 'react';
import SignatureCanvas = require('react-signature-canvas');
export class DeliverySignature extends React.Component<any, undefined>
{
public render(): JSX.Element
{
return (
<div>
<h4>Signature</h4>
<SignatureCanvas
canvasProps={{width: 500, height: 200}} />
</div>
);
}
}
一切都编译得很好,Webpack 似乎很开心。但是当我去加载页面时,我得到
Uncaught (in promise) TypeError: Cannot read property 'replaceChild'
of null
at Function.replaceChildWithTree (DOMLazyTree.js:69)
at Object.dangerouslyReplaceNodeWithMarkup (Danger.js:41)
at Object.dangerouslyReplaceNodeWithMarkup [as replaceNodeWithMarkup] (DOMChildrenOperations.js:124)
at ReactCompositeComponentWrapper._replaceNodeWithMarkup (ReactCompositeComponent.js:784)
at ReactCompositeComponentWrapper._updateRenderedComponent (ReactCompositeComponent.js:774)
at ReactCompositeComponentWrapper._performComponentUpdate (ReactCompositeComponent.js:724)
at ReactCompositeComponentWrapper.updateComponent (ReactCompositeComponent.js:645)
at ReactCompositeComponentWrapper.performUpdateIfNecessary (ReactCompositeComponent.js:561)
at Object.performUpdateIfNecessary (ReactReconciler.js:157)
at runBatchedUpdates (ReactUpdates.js:150)
我在这里错过了什么?我假设我输入错误。
谢谢。
TypeScript 与您的错误无关。声明文件的目的是帮助编译器帮助你,但你的代码可以 运行 没有它们。
但是,您的声明文件不正确。它不应该包含任何实现。 {} 也是一种实现。考虑 this question 来解决这个问题。但同样,这不是您错误的根源。
此外,命名约定是 filename.d.ts,而不是 .dt.ts
看来您导入正确。您可以将其更改为:
import * as SignatureCanvas from 'react-signature-canvas';
但其实是一样的,只不过后者是兼容ES6的。
如您在 this pull request 中所见,react-signature-canvas
的类型已添加到 DefinitelyTyped
库中。
您可以通过执行以下命令将其添加到您的项目中:
yarn add @types/react-signature-canvas
或(使用 NPM)
npm i @types/react-signature-canvas
.
我将使用 React-Signature-Canvas 作为示例。
react-signature-canvas 节点模块安装在我的项目目录中如下所示:
react-signature-canvas
build
index.js
src
bezier.js
index.js
point.js
LICENSE
package.json
README.md
index.js 文件看起来具有以下签名:
export default class SignatureCanvas extends Component {
这看起来很简单。我想我会在模块的根目录中创建一个 index.d.ts,让它工作,然后找出一个更好的地方将它存储在我的项目中(即,在 node_modules 之外,在gitignore).
但我似乎无法让它工作。我的打字文件如下所示:'
declare module 'react-signature-canvas'
{
interface ISignatureCanvasProps
{
velocityFilterWeight?: number;
minWidth?: number;
maxWidth?: number;
dotSize?: number;
penColor?: string;
backgroundColor?: string;
onEnd?: () => void;
onBegin?: () => void;
canvasProps?: any;
}
class SignatureCanvas extends React.Component<ISignatureCanvasProps, any>
{
}
export = SignatureCanvas;
}
我正在尝试像这样使用签名板:
import * as React from 'react';
import SignatureCanvas = require('react-signature-canvas');
export class DeliverySignature extends React.Component<any, undefined>
{
public render(): JSX.Element
{
return (
<div>
<h4>Signature</h4>
<SignatureCanvas
canvasProps={{width: 500, height: 200}} />
</div>
);
}
}
一切都编译得很好,Webpack 似乎很开心。但是当我去加载页面时,我得到
Uncaught (in promise) TypeError: Cannot read property 'replaceChild' of null at Function.replaceChildWithTree (DOMLazyTree.js:69) at Object.dangerouslyReplaceNodeWithMarkup (Danger.js:41) at Object.dangerouslyReplaceNodeWithMarkup [as replaceNodeWithMarkup] (DOMChildrenOperations.js:124) at ReactCompositeComponentWrapper._replaceNodeWithMarkup (ReactCompositeComponent.js:784) at ReactCompositeComponentWrapper._updateRenderedComponent (ReactCompositeComponent.js:774) at ReactCompositeComponentWrapper._performComponentUpdate (ReactCompositeComponent.js:724) at ReactCompositeComponentWrapper.updateComponent (ReactCompositeComponent.js:645) at ReactCompositeComponentWrapper.performUpdateIfNecessary (ReactCompositeComponent.js:561) at Object.performUpdateIfNecessary (ReactReconciler.js:157) at runBatchedUpdates (ReactUpdates.js:150)
我在这里错过了什么?我假设我输入错误。
谢谢。
TypeScript 与您的错误无关。声明文件的目的是帮助编译器帮助你,但你的代码可以 运行 没有它们。
但是,您的声明文件不正确。它不应该包含任何实现。 {} 也是一种实现。考虑 this question 来解决这个问题。但同样,这不是您错误的根源。
此外,命名约定是 filename.d.ts,而不是 .dt.ts
看来您导入正确。您可以将其更改为:
import * as SignatureCanvas from 'react-signature-canvas';
但其实是一样的,只不过后者是兼容ES6的。
如您在 this pull request 中所见,react-signature-canvas
的类型已添加到 DefinitelyTyped
库中。
您可以通过执行以下命令将其添加到您的项目中:
yarn add @types/react-signature-canvas
或(使用 NPM)
npm i @types/react-signature-canvas
.