使用此函数函数到不同的文件中

Function into a different file using this

提问人:DaniloMourelle 提问时间:5/12/2023 更新时间:5/12/2023 访问量:30

问:

我有一个类,它接收已知接口的其他类和一个像这样的主方法:

// BusinessLayer.ts

import getForm from "./getForm";
/*
 * other import statements
 */


class BusinessLayer {
  constructor(
    protected cacheLayer: ICacheLayer,
    protected databaseLayer: IRepositoryLayer,
    protect serviceLayer: IServiceLayer,
  ) {}

  async execute(arg1: number, arg2: string) {
    const { dependencies, formTree } = await getForm();

    ...
    ...
    ...

    return result;
  }
}

为了保持简洁,我将这个函数拆分为更小的函数,每个函数都在一个文件中,例如getForm()

// getForm.ts

import type BusinessLayer from "../BusinessLayer";

async function getForm(this: BusinessLayer) {
  const formFromCache = await this.cacheLayer.getFormFromCache();
  if (formFromCache) {
    return formFromCache;
  }

  const formFromDB = await this.databaseLayer.getFormFromDatabase();
  if (!formFromDB) {
    throw new Error("Form Not Found");
  }

  const formValue = formFromDB.value;

  return formValue;
}

export default getForm;

首先我得到了一个依赖循环错误,这是由 on getForm.ts 解决的,但现在我得到了import type

“void”类型的“this”上下文不能分配给“BusinessLayer”类型的方法的“this”.ts(2684)

打字稿

评论

0赞 Yury Tarabanko 5/12/2023
“我把这个函数拆分成更小的函数,每个函数都在一个文件中”问题在于语义上不仅仅是一个函数。这是一种方法。此函数在类之外没有用处,即使您想将其与另一个类重用,您也应该最好使用组合或继承。所以你正在努力克服你自己创造的问题。getForm
0赞 DaniloMourelle 5/12/2023
事实上,这种方法的重点只是保持文件简短,而不是重用它们。我已经尝试将所有这些与 genercis 混合在一起,并注意到这是不可能的呵呵
0赞 Yury Tarabanko 5/12/2023
不确定此文件中的代码量。但我仍然会考虑不同的方法。如果你的班级做得太多,也许会把一些东西提取到单独的班级中并使用组合?最后,IDE 确实存在折叠区域;)

答:

1赞 Yury Tarabanko 5/12/2023 #1

除了我的评论。您需要使用所需的上下文调用函数。操场

const { dependencies, formTree } = await getForm.call(this);

评论

0赞 DaniloMourelle 5/13/2023
Tks 伙计,这真的完成了工作!!:)