当前位置: 首页 > 知识库问答 >
问题:

在接口类型脚本中定义回调

司寇星海
2023-03-14

我想实现一个接口,它包含一系列函数和属性,很少函数需要在回调模式下工作。例如:

interface Writer{
     readData : (fileLocation: string) => void;
     generatData: (fileLocation: string) => void;
}

我想执行generateData函数并在作业完成后通知。例如:

const WriterInstance:Writer ={
   generateData("C:/workspace" , ()=>{
       console.log("work is done");
   });
   readData("C:/workspace/file1.text" , ()=>{
       console.log("work is done");
   })
}

我完全误解了接口中回调的语法和调用。如果有人举例说明,那就太好了。

共有2个答案

田佐
2023-03-14

只要想象回调函数是一个正常的参数。然后,将writerinstance定义为普通对象-只需定义它的属性

interface Writer{
  readData : (fileLocation: string, callback: () => void) => void;
  generateData: (fileLocation: string, callback: (error: Error, data?: any) => void) => void;
}

const WriterInstance: Writer = {
  readData: (fileLocation: string, callback: () => void) => {
    // dome something with fileLocation
    callback();
  },

  generateData: (fileLocation: string, callback: (error: Error, data?: any) => void) => {
    // dome something with fileLocation
    callback(null, true);
  }
}

// usage of WriterInstance
WriterInstance.generateData('C:/workspace/file1.text', (error, data) => {
  if (error) {
    console.log('work is not done');
    return console.log(error);
  }
  console.log('work is done');
});
璩无尘
2023-03-14

在您的界面中,您希望用两个参数来表示一个函数,第一个是字符串,第二个是函数,所以您可以这样写它:

interface Writer{
     readData : (fileLocation: string, callback: ()=>void) => void;
     generateData: (fileLocation: string, callback: ()=>void) => void;
}
 类似资料:
  • 我试图在我的主文件。 entry.ts位于src/js/entry, ts,vue的类型定义位于src/js/lib/baul/vue/type/index.d.ts 编译此文件时,输出如下。顺便说一句,typescript的目标是es6和es6模块。 JQuery工作正常(看起来像),所以我用导入替换了对vue类型定义的引用。 它编译得很好,下面是输出: 问题是没有删除类型定义的import语句

  • 考虑以下TS定义: 没什么问题,但我想知道是否有一个等效?显然,可以将泛型传递到接口中,尽管这不是我想要的,例如: 这里的示例是在React代码的上下文中,但潜在的问题是基本的TS。

  • 我想定义一个带有对象和不同类型的接口,例如 在定义上,没有问题,但在调用like后 这不起作用,并出现以下错误 错误错误:未捕获(promise中):TypeError:无法设置未定义的属性“名称”TypeError:无法设置未定义的属性“名称” 有一些相似的主题,但它们并不完全相关。(如何在类型脚本接口中定义对象或者如何在类型脚本中定义对象变量的类型?) 我很感激你帮助我找到解决办法。

  • 我正在使用一个接口来定义一个新类型。这是正确的做法吗?我做如下: 然后,为了实例化它,我必须这样做: 它实际上创建了一个空对象,这不是我想要的;但是如果没有这个,它会引发一个错误,例如,“无法读取未定义的属性‘问题’”。我定义新类型的方法是错误的吗? ====EDIT====以下是我根据你的评论所做的: 然后我说: 然后我仍然得到这个错误:无法读取未定义的属性“push”。我不想在定义接口的地方启

  • 问题内容: 两者之间有什么区别,哪个更好使用?为什么? 问题答案: 是interface,哪里是class,并且此类实现接口。 我希望使用第二种形式,这种形式更通用,即如果您不使用特定于方法的方法,则可以将其类型声明为接口类型。使用第二种形式,将实现从实现更改为实现接口的其他类将变得更加容易。 编辑: 由于许多SO用户都评论了这两种形式都可以是接受或的任何方法的参数。但是当我声明方法时,我更喜欢接

  • 在阅读了这个问题或这篇文章后,我仍然对和之间的细微差异感到有点困惑。 在本例中,我的目标是将一个简单对象分配给更广泛的