是否可以使用公共方法创建一个类,并为该方法添加一个属性以用于另一个函数。根据我的理解,javascript中的函数只是一种特殊的对象,因此应该可以实现,但是我没有看到它是在类方法的上下文中完成的。
我还将注意到我使用typescript,因此我试图构造此类,以便对其进行强类型化。
最终目标是得到这样的结果:
const dataFetcher = new FetchData();
dataFetcher.fetch(); // fetches data synchronously
dataFetcher.fetch.async(); // fetches data asynchronously
我尝试了几种选择,但均未成功
尝试1:
class FetchData {
public fetch(): void {
// fetch some data
}
fetch.async = (): Promise<void> => { // <-- this doesn't work
// fetch same data asyncronously
return new Promise((resolve, reject) => resolve());
}
}
尝试2:
interface IFetchFunction {
(): void;
async(): Promise<void>;
}
class FetchData {
public test: IFetchFunction;
constructor() {
this.test = () => { // Typescript says the property "async" is missing on this method
};
this.test.async = () => {
return new Promise((resolve, reject) => resolve());
};
}
}
答案 0 :(得分:2)
您可以使用async
同时使用Object.assign
属性来创建函数。定义时,您还需要输入async
函数,因为您想指定它解析为void
(不是unknown
,这是默认类型):>
interface IFetchFunction {
(): void;
async(): Promise<void>;
}
class FetchData {
public test: IFetchFunction;
constructor() {
this.test = Object.assign(
() => {
},
{
async: (): Promise<void> => {
return new Promise((resolve, reject) => resolve());
}
}
);
}
}