首页 > 解决方案 > 调用同一对象中定义的函数

问题描述

我正在尝试创建一个在自身内部调用函数的对象,但似乎打字稿在对象中的最后一个函数引发了一些问题。

这是打字和导入:

import * as fs from 'fs-extra';

enum T {
    FileQuery = 'FileQuery',
    File = 'File',
    FileJSON = 'FileJSON'
}

interface FileQuery {
    path: string;
    encoding: string;
}

interface File {
    path: string;
    encoding: string;
    content: string;
}

interface FileJSON {
    path: string;
    encoding: string;
    content: string;
    data: any;
}

这是代码本身

const f = {
    [`${T.FileQuery}To${T.File}`]: async (fileQuery: FileQuery): Promise<File> => {
        const { path, encoding } = fileQuery;
        const content = await fs.readFile(path, encoding);
        return { ...fileQuery, content }
    },
    [`${T.File}To${T.FileJSON}`]: (file: File): FileJSON => {
        const data = JSON.parse(file.content);
        return { ...file, data }
    },
    [`${T.FileQuery}To${T.FileJSON}`]: (fileQuery: FileQuery): FileJSON => {
        const file = f[`${T.FileQuery}To${T.File}`](fileQuery)
        return f[`${T.File}To${T.FileJSON}`](file);
    }
}

也试过这个,它也没有工作:

const f = {
    async  [`${T.FileQuery}To${T.File}`] (fileQuery: FileQuery): Promise<File> {
        const { path, encoding } = fileQuery;
        const content = await fs.readFile(path, encoding);
        return { ...fileQuery, content }
    },
    [`${T.File}To${T.FileJSON}`] (file: File): FileJSON {
        const data = JSON.parse(file.content);
        return { ...file, data }
    },
    [`${T.FileQuery}To${T.FileJSON}`] (fileQuery: FileQuery): FileJSON {
        const file = f[`${T.FileQuery}To${T.File}`](fileQuery)
        return f[`${T.File}To${T.FileJSON}`](file);
    }
}

但是,这确实可以在没有类型错误的情况下工作:

const f = {}

f[`${T.FileQuery}To${T.File}`] = async (fileQuery: FileQuery): Promise<File> => {
    const { path, encoding } = fileQuery;
    const content = await fs.readFile(path, encoding);
    return { ...fileQuery, content }
}

f[`${T.File}To${T.FileJSON}`] = (file: File): FileJSON => {
    const data = JSON.parse(file.content);
    return { ...file, data }
}

f[`${T.FileQuery}To${T.FileJSON}`] = (fileQuery: FileQuery): FileJSON => {
    const file = f[`${T.FileQuery}To${T.File}`](fileQuery)
    return f[`${T.File}To${T.FileJSON}`](file);
}

标签: typescript

解决方案


推荐阅读