首页 > 解决方案 > 可以将属性添加到 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());
        };
    }
}

标签: javascripttypescript

解决方案


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());
                }
            }
        );
    }
}

推荐阅读