[英]Extend prototype using decorator
我想添加方法setStatePromisified
來響應組件的原型,我正在嘗試使用裝飾器來實現:
interface IPromisifiedComponent {
setStatePromise: (state) => Promise<void>
}
interface IPromisifiedComponentConstructor {
new (...args): IPromisifiedComponent;
readonly prototype: IPromisifiedComponent;
}
function promisifiedDecorator() {
return function (Component: IPromisifiedComponentConstructor) {
Component.prototype.setStatePromise = (state) => {
return new Promise<void>((resolve) => {
this.setState(state, () => {
resolve();
});
});
};
}
}
@promisifiedDecorator()
class TestComponent extends React.Component<any, any> implements IPromisifiedComponent {
}
打字稿要求實施setStatePromise
方法:類型Test
缺少屬性setStatePromise
。 我該如何解決該錯誤?
編譯器抱怨,因為TestComponent
被定義為實現IPromisifiedComponent
但是它缺少此接口定義的setStatePromise
方法。
您在運行時使用裝飾器添加此方法的事實對於編譯器而言還不夠好,因此您需要讓它知道一切正常,並且知道自己在做什么:
@promisifiedDecorator()
class TestComponent extends React.Component<any, any> implements IPromisifiedComponent {
setStatePromise: (state: any) => Promise<void>;
}
另外,如果您的裝飾器不需要任何參數,則只需執行以下操作:
function promisifiedDecorator(Component: IPromisifiedComponentConstructor) {
Component.prototype.setStatePromise = (state) => {
return new Promise<void>((resolve) => {
this.setState(state, () => {
resolve();
});
});
};
}
@promisifiedDecorator
class TestComponent extends React.Component<any, any> implements IPromisifiedComponent {
setStatePromise: (state: any) => Promise<void>;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.