javascript - 可以将属性添加到 Javascript 类中的方法吗?
问题描述
是否可以使用公共方法创建一个类并将属性添加到该方法以用于另一个功能。据我了解,javascript 中的函数只是一种特殊类型的对象,所以这应该是可能的,但我还没有看到它在类方法的上下文中完成。
我还要注意我使用打字稿,所以我试图构造这个类,以便它是强类型的。
最终目标是最终得到这样的结果:
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());
};
}
}
解决方案
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());
}
}
);
}
}
推荐阅读
- java - Mongodb 聚合多个字段。如何别名 _id 字段以映射到正确的对象
- c# - bower_components 文件夹未部署到 Azure
- xml - XML Marshalling 生成没有 Root 的 XML
- java - JavaFX Spinner 从场景中移除后继续运行
- azure-data-explorer - 在 Kusto 中保留连续导出的工件历史记录
- python - Kivy 复选框。自己的背景图片
- r - R找不到要用于绘图的字体
- android - 如何使用建造者模式?
- python - 随着时间的推移重置计数器变量
- reactjs - 如何获取新的子元素reactjs