通常のボタンが持つすべての小道具を受け入れて渡すために、Buttonコンポーネントを拡張してその小道具のインターフェイスタイプを拡張したいと思います。下の例では、onClick関数から約束を受け取ったボタンを作成し、それが解決するのを待つ間にローダーを表示します。コンポーネントをラップしてその小道具のインターフェイスを継承する方法
私の問題は、コンパイラがButtonPropsを見つける場所を知らず、おそらく独自の名前空間で定義されているということです。
どういうわけか、その定義を自分のコンポーネント用に拡張することはできますか?私は "タイプ"のような小道具を再定義して、それらを通過させる必要はないと思っています。
import React from 'react';
import { Button } from 'antd';
// extend interface already defined in antd
interface ButtonProps {
onClick: (event: any) => Promise<any>;
}
interface AsyncButtonState {
loading: boolean;
}
export class AsyncButton extends React.Component<
ButtonProps,
AsyncButtonState
> {
public state = {
loading: false,
};
public render() {
return (
<Button
{...this.props}
onClick={this.handleClick}
loading={this.state.loading}
/>
);
}
private handleClick = async evt => {
this.setState({ loading: true });
await this.props.onClick(evt);
this.setState({ loading: false });
};
}
export default AsyncButton;
---- EDIT ----
私はantdからButtonPropsインタフェースをインポートする方法を見つけました。今私はそれを拡張する方法を理解する必要があります。
import { ButtonProps } from 'antd/lib/button';
interface ButtonProps {
onClick: (event: any) => Promise<any>;
children: React.ReactNode;
}
これは、インポートことわざのためのエラーを与える:
はいTypescriptでも同様のことが可能です。私はインターフェイスがちょうど統合されていると思う(あなたは普及が必要ない)。私は自分自身のためにボタンの小道具のインターフェイスをインポートする方法を見つけました(編集を参照してください)、私はコンパイラが新しいものを作成する代わりにantdパッケージからインタフェースを扱っていることを理解する方法を知りません。たぶんこれは[関連]です(https://stackoverflow.com/questions/37263357/how-to-declare-and-import-typescript-interfaces-in-a-separate-file) –