typescript - 调用同一对象中定义的函数
问题描述
我正在尝试创建一个在自身内部调用函数的对象,但似乎打字稿在对象中的最后一个函数引发了一些问题。
这是打字和导入:
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);
}
解决方案
推荐阅读
- javascript - 使用 React JS 搜索和显示数组
- c# - 模型指令每个文档只能出现一次(将按钮添加到列表问题) ASP.NET MVC Core C#
- reactjs - 构建 Ionic React 应用程序后如何运行它
- python - python - TypeError:需要一个类似字节的对象,而不是'str'
- javascript - nuxt.js 中的碰撞检测。代码运行没有错误。但是有些功能不起作用
- laravel - Laravel 8 - Jetstream +惯性.js - Vue开发工具不起作用
- ios - 无法使用 fastlane spaceauth 请求会话:Spaceship::AccessForbiddenError
- r - 当方程相互依赖时,替代 for 循环进行快速计算
- mongodb - Mongodb 4.2.8:无法将会话添加到缓存中,因为活动会话数过多
- javascript - 使用 Javascript 和 Moment.js 获得几天